yell 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +2 -2
- data/README.md +7 -22
- data/lib/yell.rb +20 -20
- data/lib/yell/adapters/base.rb +1 -1
- data/lib/yell/adapters/datefile.rb +4 -3
- data/lib/yell/adapters/file.rb +2 -2
- data/lib/yell/adapters/io.rb +5 -5
- data/lib/yell/event.rb +40 -0
- data/lib/yell/formatter.rb +64 -17
- data/lib/yell/level.rb +9 -6
- data/lib/yell/logger.rb +13 -14
- data/lib/yell/version.rb +2 -2
- data/spec/spec_helper.rb +9 -0
- data/spec/yell_spec.rb +0 -1
- metadata +4 -3
- data/init.rb +0 -1
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -23,29 +23,11 @@ message as follows:
|
|
23
23
|
logger = Yell.new STDOUT
|
24
24
|
|
25
25
|
logger.info "Hello World"
|
26
|
-
"2012-02-29T09:30:00+01:00 [ INFO] 65784 : Hello World"
|
27
|
-
|
28
|
-
#ISO8601 Timestamp Level Pid
|
26
|
+
#=> "2012-02-29T09:30:00+01:00 [ INFO] 65784 : Hello World"
|
27
|
+
# ^ ^ ^ ^
|
28
|
+
# ISO8601 Timestamp Level Pid Message
|
29
29
|
```
|
30
30
|
|
31
|
-
You can alternate the formatting, or completely disable it altogether. See the
|
32
|
-
next examples for reference:
|
33
|
-
|
34
|
-
```ruby
|
35
|
-
# No formatting
|
36
|
-
logger = Yell.new STDOUT, :format => false
|
37
|
-
logger.info "No formatting"
|
38
|
-
"No formatting"
|
39
|
-
|
40
|
-
# Alternate formatting
|
41
|
-
logger = Yell.new STDOUT, :format => "'%m' at %d"
|
42
|
-
logger.info "Alternate formatting"
|
43
|
-
"'Alternate format' at 2012-02-29T09:30:00+01:00"
|
44
|
-
```
|
45
|
-
|
46
|
-
As you can see, it basically is just string interpolation with a few reserved
|
47
|
-
captures. You can see the list at #Yell::Formatter.
|
48
|
-
|
49
31
|
When no arguments are given, Yell will check for `ENV['RACK_ENV']` and
|
50
32
|
determine the filename from that.
|
51
33
|
|
@@ -57,8 +39,11 @@ a filename explicitly.
|
|
57
39
|
Naturally, if you pass a `:filename` to Yell:
|
58
40
|
|
59
41
|
```ruby
|
60
|
-
logger = Yell.new '
|
42
|
+
logger = Yell.new 'yell.log'
|
61
43
|
```
|
62
44
|
|
45
|
+
Please refer to the wiki for further usage examples:
|
46
|
+
https://github.com/rudionrails/yell/wiki/
|
47
|
+
|
63
48
|
Copyright © 2011-2012 Rudolf Schmidt, released under the MIT license
|
64
49
|
|
data/lib/yell.rb
CHANGED
@@ -23,35 +23,35 @@
|
|
23
23
|
|
24
24
|
require 'time'
|
25
25
|
|
26
|
-
|
26
|
+
begin
|
27
|
+
require 'yell/event'
|
28
|
+
rescue LoadError
|
29
|
+
$: << File.dirname(__FILE__)
|
30
|
+
require 'yell/event'
|
31
|
+
end
|
27
32
|
|
33
|
+
require 'yell/level'
|
28
34
|
require 'yell/formatter'
|
29
35
|
require 'yell/adapters'
|
30
|
-
require 'yell/level'
|
31
36
|
require 'yell/logger'
|
32
37
|
|
33
38
|
module Yell #:nodoc:
|
34
39
|
# The possible log levels
|
35
40
|
Severities = [ 'DEBUG', 'INFO', 'WARN', 'ERROR', 'FATAL', 'UNKNOWN' ]
|
36
41
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
ENV['YELL_ENV'] || ENV['RACK_ENV'] || 'development'
|
51
|
-
end
|
52
|
-
|
53
|
-
def level( val = nil ) #:nodoc:
|
54
|
-
Yell::Level.new( val )
|
42
|
+
class << self
|
43
|
+
# Creates a new logger instance.
|
44
|
+
#
|
45
|
+
# Refer to #Yell::Loggger for usage.
|
46
|
+
#
|
47
|
+
# @return [Yell::Logger] The logger instance
|
48
|
+
def new( *args, &block )
|
49
|
+
Yell::Logger.new( *args, &block )
|
50
|
+
end
|
51
|
+
|
52
|
+
def env #:nodoc:
|
53
|
+
ENV['YELL_ENV'] || ENV['RACK_ENV'] || 'development'
|
54
|
+
end
|
55
55
|
end
|
56
56
|
|
57
57
|
end
|
data/lib/yell/adapters/base.rb
CHANGED
@@ -21,13 +21,14 @@ module Yell #:nodoc:
|
|
21
21
|
super( options, &block )
|
22
22
|
end
|
23
23
|
|
24
|
-
|
24
|
+
# @overload Close the file if date is expired
|
25
|
+
def write( event )
|
25
26
|
close if close?
|
26
27
|
|
27
|
-
super(
|
28
|
+
super( event )
|
28
29
|
end
|
29
30
|
|
30
|
-
# @
|
31
|
+
# @overload Reset the file handle
|
31
32
|
def close
|
32
33
|
@filename = new_filename
|
33
34
|
|
data/lib/yell/adapters/file.rb
CHANGED
@@ -13,7 +13,7 @@ module Yell #:nodoc:
|
|
13
13
|
@filename = options.fetch(:filename, default_filename)
|
14
14
|
end
|
15
15
|
|
16
|
-
# @
|
16
|
+
# @overload Lazily open the file handle
|
17
17
|
def stream
|
18
18
|
@stream ||= ::File.open( @filename, ::File::WRONLY|::File::APPEND|::File::CREAT )
|
19
19
|
end
|
@@ -21,7 +21,7 @@ module Yell #:nodoc:
|
|
21
21
|
|
22
22
|
private
|
23
23
|
|
24
|
-
def default_filename
|
24
|
+
def default_filename #:nodoc:
|
25
25
|
::File.directory?("log") ? "log/#{Yell.env}.log" : "#{Yell.env}.log"
|
26
26
|
end
|
27
27
|
|
data/lib/yell/adapters/io.rb
CHANGED
@@ -36,17 +36,17 @@ module Yell
|
|
36
36
|
#
|
37
37
|
# @example
|
38
38
|
# write( 'info', 'Hello World' )
|
39
|
-
def write(
|
40
|
-
|
39
|
+
def write( event )
|
40
|
+
message = @formatter.format( event )
|
41
41
|
|
42
42
|
# colorize if applicable
|
43
43
|
if colorize? and color = Colors[level]
|
44
|
-
|
44
|
+
message = color + message + Colors['DEFAULT']
|
45
45
|
end
|
46
46
|
|
47
|
-
|
47
|
+
message << "\n" unless message[-1] == ?\n # add new line if there is none
|
48
48
|
|
49
|
-
write!(
|
49
|
+
write!( message )
|
50
50
|
end
|
51
51
|
|
52
52
|
# Set the format for your message.
|
data/lib/yell/event.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
module Yell #:nodoc:
|
2
|
+
|
3
|
+
class Event
|
4
|
+
CallerRegexp = /^(.+?):(\d+)(?::in `(.*)')?/ #:nodoc:
|
5
|
+
|
6
|
+
# Accessor to the log level
|
7
|
+
attr_reader :level
|
8
|
+
|
9
|
+
# Accessor to the log message
|
10
|
+
attr_reader :message
|
11
|
+
|
12
|
+
# Accessor to the time the log event occured
|
13
|
+
attr_reader :time
|
14
|
+
|
15
|
+
# Accessor to filename the log event occured
|
16
|
+
attr_reader :file
|
17
|
+
|
18
|
+
# Accessor to the line the log event occured
|
19
|
+
attr_reader :line
|
20
|
+
|
21
|
+
# Accessor to the method the log event occured
|
22
|
+
attr_reader :method
|
23
|
+
|
24
|
+
|
25
|
+
# Initialize a new log event
|
26
|
+
def initialize( level, message = nil, &block )
|
27
|
+
@time = Time.now
|
28
|
+
@level = level
|
29
|
+
@message = block ? block.call : message
|
30
|
+
|
31
|
+
if m = CallerRegexp.match( caller(4).first )
|
32
|
+
@file, @line, @method = m[1..-1]
|
33
|
+
else
|
34
|
+
@file, @line, @method = ['', '', '']
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
data/lib/yell/formatter.rb
CHANGED
@@ -2,23 +2,74 @@
|
|
2
2
|
|
3
3
|
module Yell #:nodoc:
|
4
4
|
|
5
|
+
# No format on the log message
|
6
|
+
#
|
7
|
+
# @example
|
8
|
+
# logger = Yell.new STDOUT, :format => false
|
9
|
+
# logger.info "Hello World!"
|
10
|
+
# #=> "Hello World!"
|
11
|
+
NoFormat = "%m"
|
12
|
+
|
13
|
+
# Default Format
|
14
|
+
#
|
15
|
+
# @example
|
16
|
+
# logger = Yell.new STDOUT, :format => Yell::DefaultFormat
|
17
|
+
# logger.info "Hello World!"
|
18
|
+
# #=> "2012-02-29T09:30:00+01:00 [ INFO] 65784 : Hello World!"
|
19
|
+
# # ^ ^ ^ ^
|
20
|
+
# # ISO8601 Timestamp Level Pid Message
|
21
|
+
DefaultFormat = "%d [%5L] %p : %m"
|
22
|
+
|
23
|
+
# Basic Format
|
24
|
+
#
|
25
|
+
# @example
|
26
|
+
# logger = Yell.new STDOUT, :format => Yell::BasicFormat
|
27
|
+
# logger.info "Hello World!"
|
28
|
+
# #=> "I, 2012-02-29T09:30:00+01:00 : Hello World!"
|
29
|
+
# # ^ ^ ^
|
30
|
+
# # ^ ISO8601 Timestamp Message
|
31
|
+
# # Level (short)
|
32
|
+
BasicFormat = "%l, %d : %m"
|
33
|
+
|
34
|
+
# Extended Format
|
35
|
+
#
|
36
|
+
# @example
|
37
|
+
# logger = Yell.new STDOUT, :format => Yell::ExtendedFormat
|
38
|
+
# logger.info "Hello World!"
|
39
|
+
# #=> "2012-02-29T09:30:00+01:00 [ INFO] 65784 localhost : Hello World!"
|
40
|
+
# # ^ ^ ^ ^ ^
|
41
|
+
# # ISO8601 Timestamp Level Pid Hostname Message
|
42
|
+
ExtendedFormat = "%d [%5L] %p %h : %m"
|
43
|
+
|
44
|
+
|
45
|
+
def format( pattern, date_pattern ) #:nodoc:
|
46
|
+
Yell::Formatter.new( pattern, date_pattern )
|
47
|
+
end
|
48
|
+
|
49
|
+
|
5
50
|
# The +Formatter+ provides a handle to configure your log message style.
|
6
51
|
class Formatter
|
7
52
|
|
53
|
+
#:nodoc:
|
8
54
|
PatternTable = {
|
9
|
-
"m" => "message",
|
10
|
-
"
|
11
|
-
"
|
12
|
-
"
|
13
|
-
"p" => "
|
14
|
-
"h" => "
|
55
|
+
"m" => "event.message", # Message
|
56
|
+
"l" => "event.level[0]", # Level (short), e.g.'I', 'W'
|
57
|
+
"L" => "event.level", # Level, e.g. 'INFO', 'WARN'
|
58
|
+
"d" => "date(event)", # ISO8601 Timestamp
|
59
|
+
"p" => "Process.pid", # PID
|
60
|
+
"h" => "Socket.gethostname rescue nil", # Hostname
|
61
|
+
"F" => "event.file", # Path with filename where the logger was called
|
62
|
+
"f" => "File.basename(event.file)", # Filename where the loger was called
|
63
|
+
"M" => "event.method", # Method name where the logger was called
|
64
|
+
"n" => "event.line" # Line where the logger was called
|
15
65
|
}
|
16
|
-
|
17
|
-
|
66
|
+
|
67
|
+
#:nodoc:
|
68
|
+
PatternRegexp = /([^%]*)(%\d*)?([#{PatternTable.keys.join}])?(.*)/
|
18
69
|
|
19
70
|
|
20
71
|
def initialize( pattern = nil, date_pattern = nil )
|
21
|
-
@pattern = pattern ||
|
72
|
+
@pattern = pattern || Yell::DefaultFormat
|
22
73
|
@date_pattern = date_pattern
|
23
74
|
|
24
75
|
define!
|
@@ -27,6 +78,7 @@ module Yell #:nodoc:
|
|
27
78
|
|
28
79
|
private
|
29
80
|
|
81
|
+
# defines the format method
|
30
82
|
def define!
|
31
83
|
buff, args, _pattern = "", [], @pattern.dup
|
32
84
|
|
@@ -43,19 +95,14 @@ module Yell #:nodoc:
|
|
43
95
|
end
|
44
96
|
|
45
97
|
instance_eval %-
|
46
|
-
def format(
|
98
|
+
def format( event )
|
47
99
|
sprintf( "#{buff}", #{args.join(',')} )
|
48
100
|
end
|
49
101
|
-
|
50
102
|
end
|
51
103
|
|
52
|
-
def date
|
53
|
-
@date_pattern ?
|
54
|
-
end
|
55
|
-
|
56
|
-
def hostname
|
57
|
-
return @hostname if defined?( @hostname )
|
58
|
-
@hostname = Socket.gethostname rescue nil
|
104
|
+
def date( event )
|
105
|
+
@date_pattern ? event.time.strftime( @date_pattern ) : event.time.iso8601
|
59
106
|
end
|
60
107
|
|
61
108
|
end
|
data/lib/yell/level.rb
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
module Yell #:nodoc:
|
4
4
|
|
5
|
+
def level( val = nil ) #:nodoc:
|
6
|
+
Yell::Level.new( val )
|
7
|
+
end
|
8
|
+
|
5
9
|
# The +Level+ class handles the severities for you in order to determine
|
6
10
|
# if an adapter should log or not.
|
7
11
|
#
|
@@ -12,7 +16,6 @@ module Yell #:nodoc:
|
|
12
16
|
# lt :warn # Will set from :info level an below
|
13
17
|
# lte :warn # Will set from :warn level and below
|
14
18
|
#
|
15
|
-
#
|
16
19
|
# You are able to combine those modifiers to your convenience.
|
17
20
|
#
|
18
21
|
# @example Set from :info to :error (including)
|
@@ -89,7 +92,7 @@ module Yell #:nodoc:
|
|
89
92
|
|
90
93
|
private
|
91
94
|
|
92
|
-
def calculate!( modifier, severity )
|
95
|
+
def calculate!( modifier, severity ) #:nodoc:
|
93
96
|
index = index_from( severity )
|
94
97
|
return if index.nil?
|
95
98
|
|
@@ -104,7 +107,7 @@ module Yell #:nodoc:
|
|
104
107
|
taint unless tainted?
|
105
108
|
end
|
106
109
|
|
107
|
-
def index_from( severity )
|
110
|
+
def index_from( severity ) #:nodoc:
|
108
111
|
case severity
|
109
112
|
when Integer then severity
|
110
113
|
when String, Symbol then Yell::Severities.index( severity.to_s.upcase )
|
@@ -112,7 +115,7 @@ module Yell #:nodoc:
|
|
112
115
|
end
|
113
116
|
end
|
114
117
|
|
115
|
-
def ascending!( index )
|
118
|
+
def ascending!( index ) #:nodoc:
|
116
119
|
@severities.each_with_index do |s, i|
|
117
120
|
next if s == false # skip
|
118
121
|
|
@@ -120,7 +123,7 @@ module Yell #:nodoc:
|
|
120
123
|
end
|
121
124
|
end
|
122
125
|
|
123
|
-
def descending!( index )
|
126
|
+
def descending!( index ) #:nodoc:
|
124
127
|
@severities.each_with_index do |s, i|
|
125
128
|
next if s == false # skip
|
126
129
|
|
@@ -128,7 +131,7 @@ module Yell #:nodoc:
|
|
128
131
|
end
|
129
132
|
end
|
130
133
|
|
131
|
-
def set!( index )
|
134
|
+
def set!( index ) #:nodoc:
|
132
135
|
@severities.map! { false } unless tainted?
|
133
136
|
|
134
137
|
@severities[index] = true
|
data/lib/yell/logger.rb
CHANGED
@@ -117,27 +117,26 @@ module Yell #:nodoc:
|
|
117
117
|
# Creates instance methods for every defined log level (debug, info, ...) depending
|
118
118
|
# on whether anything should be logged upon, for instance, #info.
|
119
119
|
def define_log_methods!
|
120
|
-
Yell::Severities.each do |
|
121
|
-
name =
|
120
|
+
Yell::Severities.each do |s|
|
121
|
+
name = s.downcase
|
122
122
|
|
123
123
|
instance_eval %-
|
124
|
-
def #{name}?; #{@level.at?(name)}; end
|
125
|
-
|
126
|
-
def #{name}(
|
127
|
-
return unless #{name}?
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
end # end
|
124
|
+
def #{name}?; #{@level.at?(name)}; end # def info?; true; end
|
125
|
+
#
|
126
|
+
def #{name}( m = nil, &b ) # def info( m = nil, &b )
|
127
|
+
return unless #{name}? # return unless info?
|
128
|
+
#
|
129
|
+
write Yell::Event.new( '#{s}', m, &b ) # write Yell::Event.new( "INFO", m, &b )
|
130
|
+
#
|
131
|
+
true # true
|
132
|
+
end # end
|
134
133
|
-
|
135
134
|
end
|
136
135
|
end
|
137
136
|
|
138
137
|
# Cycles all the adapters and writes the message
|
139
|
-
def write(
|
140
|
-
@adapters.each { |a| a.write(
|
138
|
+
def write( event )
|
139
|
+
@adapters.each { |a| a.write(event) if a.write?(event.level) }
|
141
140
|
end
|
142
141
|
|
143
142
|
end
|
data/lib/yell/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -7,5 +7,14 @@ require 'rspec'
|
|
7
7
|
require 'timecop'
|
8
8
|
|
9
9
|
RSpec.configure do |config|
|
10
|
+
|
11
|
+
config.before do
|
12
|
+
Yell.config.stub!( :yaml_file ).and_return( File.dirname(__FILE__) + '/config/yell.yml' )
|
13
|
+
end
|
14
|
+
|
15
|
+
config.after do
|
16
|
+
Yell.config.reload! # to not run into caching problems during tests
|
17
|
+
end
|
18
|
+
|
10
19
|
end
|
11
20
|
|
data/spec/yell_spec.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yell
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-03-
|
12
|
+
date: 2012-03-22 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: An easy to use logging library to log into files and any other self-defined
|
15
15
|
adapters
|
@@ -23,7 +23,6 @@ files:
|
|
23
23
|
- LICENSE.txt
|
24
24
|
- README.md
|
25
25
|
- Rakefile
|
26
|
-
- init.rb
|
27
26
|
- lib/yell.rb
|
28
27
|
- lib/yell/adapters.rb
|
29
28
|
- lib/yell/adapters/.file.rb.swp
|
@@ -31,6 +30,7 @@ files:
|
|
31
30
|
- lib/yell/adapters/datefile.rb
|
32
31
|
- lib/yell/adapters/file.rb
|
33
32
|
- lib/yell/adapters/io.rb
|
33
|
+
- lib/yell/event.rb
|
34
34
|
- lib/yell/formatter.rb
|
35
35
|
- lib/yell/level.rb
|
36
36
|
- lib/yell/logger.rb
|
@@ -67,3 +67,4 @@ test_files:
|
|
67
67
|
- spec/spec.opts
|
68
68
|
- spec/spec_helper.rb
|
69
69
|
- spec/yell_spec.rb
|
70
|
+
has_rdoc:
|
data/init.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require 'yell'
|