yell 0.4.1 → 0.4.2
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/README.md +94 -6
- data/lib/yell/adapters/base.rb +5 -0
- data/lib/yell/adapters/datefile.rb +5 -49
- data/lib/yell/version.rb +1 -1
- data/spec/yell/adapters/base_spec.rb +67 -0
- data/yell.gemspec +2 -2
- metadata +8 -6
data/README.md
CHANGED
@@ -1,6 +1,9 @@
|
|
1
|
-
Yell - Your Extensible Logging Library
|
1
|
+
**Yell - Your Extensible Logging Library**
|
2
|
+
|
3
|
+
[](http://travis-ci.org/rudionrails/yell)
|
4
|
+
|
5
|
+
Yell works and is tested with ruby 1.8.7, 1.9.x, jruby 1.8 and 1.9 mode, rubinius 1.8 and 1.9 as well as ree.
|
2
6
|
|
3
|
-
[](http://travis-ci.org/rudionrails/yell)
|
4
7
|
|
5
8
|
## Installation
|
6
9
|
|
@@ -16,6 +19,7 @@ Or in your Gemfile:
|
|
16
19
|
gem "yell"
|
17
20
|
```
|
18
21
|
|
22
|
+
|
19
23
|
## Usage
|
20
24
|
|
21
25
|
On the basics, Yell works just like any other logging library. However, it
|
@@ -45,10 +49,94 @@ Naturally, you can pass a `:filename` to Yell:
|
|
45
49
|
logger = Yell.new "yell.log"
|
46
50
|
```
|
47
51
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
+
### Levels
|
53
|
+
|
54
|
+
Just like any other logging library, Yell allows you to define from which level
|
55
|
+
onwarns you want to write your log message. here are some examples to show how
|
56
|
+
you can combine those.
|
57
|
+
|
58
|
+
##### Example: Write from `:info` onwards
|
59
|
+
|
60
|
+
```ruby
|
61
|
+
logger = Yell.new STDOUT, :level => :info # write on :info, :warn, :error, :fatal
|
62
|
+
```
|
63
|
+
|
64
|
+
##### Example: Write on `:info` and `:error` only
|
65
|
+
|
66
|
+
```ruby
|
67
|
+
logger - Yell.new STDOUT, :level => [:info, :error] # write on :info and :error only
|
68
|
+
```
|
69
|
+
|
70
|
+
##### Example: Write between :info and :error
|
71
|
+
|
72
|
+
```ruby
|
73
|
+
logger = Yell.new STDOUT, :level => (:info..:error)
|
74
|
+
|
75
|
+
# NOTE: The Range might only work with 1.9 compatible rubies!
|
76
|
+
```
|
77
|
+
|
78
|
+
There are more ways to set your logging level, please consult the
|
79
|
+
[wiki](https://github.com/rudionrails/yell/wiki) on that.
|
80
|
+
|
81
|
+
|
82
|
+
### Adapters
|
83
|
+
|
84
|
+
Yell comes with various adapters already build-in. Those are the mainly IO-based
|
85
|
+
adapters for every day use. There are additional ones available as separate gems. Please
|
86
|
+
consult the [wiki](https://github.com/rudionrails/yell/wiki) on that - they are listed
|
87
|
+
there.
|
88
|
+
|
89
|
+
The standard adapters are:
|
90
|
+
|
91
|
+
**:stdout** or **STDOUT**: Messages will be written to STDOUT
|
92
|
+
**:stderr** or **STDERR**: Messages will be written to STDERR
|
93
|
+
**:file**: Messages will be written to a file
|
94
|
+
**:datefile**: Messages will be written to a timestamped file
|
95
|
+
|
96
|
+
|
97
|
+
Here are some short examples on how to combine them:
|
98
|
+
|
99
|
+
##### Example: Notice messages go into `STDOUT` and error messages into `STDERR`
|
100
|
+
|
101
|
+
```ruby
|
102
|
+
logger = Yell.new do
|
103
|
+
adapter STDOUT, :level => [:debug, :info, :warn]
|
104
|
+
adapter STDERR, :level => [:error, :fatal]
|
105
|
+
end
|
106
|
+
```
|
107
|
+
|
108
|
+
##### Example: Notice messages to into `application.log` and error messages into `error.log`
|
109
|
+
|
110
|
+
```ruby
|
111
|
+
logger = Yell.new do
|
112
|
+
adapter :file, 'application.log', :level => [:debug, :info, :warn]
|
113
|
+
adapter :file, 'error.log', :level => [:error, :fatal]
|
114
|
+
end
|
115
|
+
```
|
116
|
+
|
117
|
+
##### Example: Every log severity is handled by a separate adapter and we ignore `:debug` and `:info` levels
|
118
|
+
|
119
|
+
```ruby
|
120
|
+
logger = Yell.new do
|
121
|
+
level :warn # only start logging from :warn upwards
|
122
|
+
|
123
|
+
adapter :stdout, :level => [:warn]
|
124
|
+
adapter :datefile, 'error.log', :level => [:error]
|
125
|
+
adapter :datefile, 'fatal.log', :level => [:fatal]
|
126
|
+
end
|
127
|
+
```
|
128
|
+
|
129
|
+
## Further Readings
|
130
|
+
|
131
|
+
[How To: Setting The Log Level](https://github.com/rudionrails/yell/wiki/101-setting-the-log-level)
|
132
|
+
[How To: Formatting Log Messages](https://github.com/rudionrails/yell/wiki/101-formatting-log-messages)
|
133
|
+
[How To: Using Adapters](https://github.com/rudionrails/yell/wiki/101-using-adapters)
|
134
|
+
[How To: The Datefile Adapter](https://github.com/rudionrails/yell/wiki/101-the-datefile-adapter)
|
135
|
+
[How To: Different Adapters for Different Log Levels](https://github.com/rudionrails/yell/wiki/101-different-adapters-for-different-log-levels)
|
136
|
+
|
137
|
+
|
138
|
+
You can find further examples and additional adapters in the [wiki](https://github.com/rudionrails/yell/wiki).
|
139
|
+
or have a look into the examples folder.
|
52
140
|
|
53
141
|
|
54
142
|
Copyright © 2011-2012 Rudolf Schmidt, released under the MIT license
|
data/lib/yell/adapters/base.rb
CHANGED
@@ -10,7 +10,12 @@ module Yell #:nodoc:
|
|
10
10
|
# by the {Yell::Logger}.
|
11
11
|
class Base
|
12
12
|
|
13
|
+
# Accessor to the options
|
14
|
+
attr_reader :options
|
15
|
+
|
13
16
|
def initialize( options = {}, &block )
|
17
|
+
@options = options
|
18
|
+
|
14
19
|
level options[:level]
|
15
20
|
|
16
21
|
instance_eval( &block ) if block
|
@@ -18,39 +18,22 @@ module Yell #:nodoc:
|
|
18
18
|
|
19
19
|
@date = nil # default; do not override --R
|
20
20
|
|
21
|
-
keep options[:keep]
|
22
|
-
|
23
21
|
super
|
24
22
|
end
|
25
23
|
|
26
24
|
# @overload Reset the file handle
|
27
25
|
def close
|
28
|
-
@filename =
|
26
|
+
@filename = new_filename
|
29
27
|
|
30
28
|
super
|
31
29
|
end
|
32
30
|
|
33
|
-
# Set the amount of logfiles to keep when rolling over
|
34
|
-
#
|
35
|
-
# @example Keep the last 5 logfiles
|
36
|
-
# keep 5
|
37
|
-
def keep( n = nil )
|
38
|
-
@keep = n
|
39
|
-
end
|
40
31
|
|
41
32
|
private
|
42
33
|
|
43
34
|
# @overload Close the file if date is expired
|
44
35
|
def write!( event )
|
45
|
-
if close?
|
46
|
-
close
|
47
|
-
|
48
|
-
unless ::File.exist?( @filename )
|
49
|
-
cleanup if cleanup?
|
50
|
-
|
51
|
-
stream.print( "# -*- #{@date.iso8601} (#{@date.to_f}) [#{@date_pattern}] -*-\n" )
|
52
|
-
end
|
53
|
-
end
|
36
|
+
close if close?
|
54
37
|
|
55
38
|
super( event )
|
56
39
|
end
|
@@ -61,12 +44,8 @@ module Yell #:nodoc:
|
|
61
44
|
# If the current time hits the pattern, it closes the file stream.
|
62
45
|
#
|
63
46
|
# @return [Boolean] true or false
|
64
|
-
#
|
65
|
-
# TODO: This method causes the datefile adapter to be twice as slow as the file.
|
66
|
-
# Let's refactor this.
|
67
47
|
def close?
|
68
|
-
_date = Time.now
|
69
|
-
|
48
|
+
_date = Time.now.strftime( @date_pattern )
|
70
49
|
if !@stream or _date != @date
|
71
50
|
@date = _date
|
72
51
|
return true
|
@@ -75,31 +54,9 @@ module Yell #:nodoc:
|
|
75
54
|
false
|
76
55
|
end
|
77
56
|
|
78
|
-
def cleanup
|
79
|
-
files = Dir[ @file_basename.sub( /(\.\w+)?$/, ".*\\1" ) ].map do |f|
|
80
|
-
[ f, metadata_from(f).last ]
|
81
|
-
end.select do |(f, p)|
|
82
|
-
@date_pattern == p
|
83
|
-
end
|
84
|
-
|
85
|
-
::File.unlink( *files.map(&:first)[0..-(@keep)] )
|
86
|
-
end
|
87
|
-
|
88
|
-
def cleanup?
|
89
|
-
!!@keep
|
90
|
-
end
|
91
|
-
|
92
57
|
# Sets the filename with the `:date_pattern` appended to it.
|
93
|
-
def
|
94
|
-
@file_basename.sub( /(\.\w+)?$/, ".#{date
|
95
|
-
end
|
96
|
-
|
97
|
-
def metadata_from( file )
|
98
|
-
if m = ::File.open( file, &:readline ).match( /^# -\*- (.+) \((\d+\.\d+)\) \[(.+)\] -\*-$/ )
|
99
|
-
[ Time.at( m[2].to_f ), m[3] ]
|
100
|
-
else
|
101
|
-
[ ::File.mtime( file ), "" ]
|
102
|
-
end
|
58
|
+
def new_filename
|
59
|
+
@file_basename.sub( /(\.\w+)?$/, ".#{@date}\\1" )
|
103
60
|
end
|
104
61
|
|
105
62
|
end
|
@@ -108,4 +65,3 @@ module Yell #:nodoc:
|
|
108
65
|
|
109
66
|
end
|
110
67
|
end
|
111
|
-
|
data/lib/yell/version.rb
CHANGED
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Yell::Adapters::Base do
|
4
|
+
|
5
|
+
context "initialize with :level" do
|
6
|
+
before do
|
7
|
+
any_instance_of( Yell::Adapters::Base ) do |base|
|
8
|
+
mock( base ).level( :info )
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should set the level" do
|
13
|
+
Yell::Adapters::Base.new :level => :info
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context "insitialize with :block" do
|
18
|
+
context :level do
|
19
|
+
before do
|
20
|
+
any_instance_of( Yell::Adapters::Base ) do |base|
|
21
|
+
mock( base ).level( :info )
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should set the level" do
|
26
|
+
Yell::Adapters::Base.new :level => :info
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context :options do
|
32
|
+
let( :options ) { { :my => :options } }
|
33
|
+
let( :adapter ) { Yell::Adapters::Base.new( options ) }
|
34
|
+
|
35
|
+
it { options.should == options }
|
36
|
+
end
|
37
|
+
|
38
|
+
context :write do
|
39
|
+
subject { Yell::Adapters::Base.new :level => :info }
|
40
|
+
|
41
|
+
it "should delegate :event to :write!" do
|
42
|
+
event = Yell::Event.new( "INFO", "Hello World!" )
|
43
|
+
|
44
|
+
mock( subject ).write!( event )
|
45
|
+
|
46
|
+
subject.write( event )
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should not write when event does not have the right level" do
|
50
|
+
event = Yell::Event.new( "DEBUG", "Hello World!" )
|
51
|
+
|
52
|
+
dont_allow( subject ).write!( event )
|
53
|
+
|
54
|
+
subject.write( event )
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context :close do
|
59
|
+
subject { Yell::Adapters::Base.new.close }
|
60
|
+
|
61
|
+
it "should raise" do
|
62
|
+
lambda { subject }.should raise_error("Not implemented" )
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
data/yell.gemspec
CHANGED
@@ -7,10 +7,10 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.version = Yell::VERSION
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
9
|
s.authors = ["Rudolf Schmidt"]
|
10
|
-
|
10
|
+
|
11
11
|
s.homepage = "http://rubygems.org/gems/yell"
|
12
12
|
s.summary = %q{Yell - Your Extensible Logging Library }
|
13
|
-
s.description = %q{
|
13
|
+
s.description = %q{Yell - Your Extensible Logging Library. Define multiple adapters, various log level combinations or message formatting options like you've never done before}
|
14
14
|
|
15
15
|
s.rubyforge_project = "yell"
|
16
16
|
|
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.
|
4
|
+
version: 0.4.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-03-
|
12
|
+
date: 2012-03-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rr
|
16
|
-
requirement: &
|
16
|
+
requirement: &70222528328160 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,9 +21,9 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
25
|
-
description:
|
26
|
-
|
24
|
+
version_requirements: *70222528328160
|
25
|
+
description: Yell - Your Extensible Logging Library. Define multiple adapters, various
|
26
|
+
log level combinations or message formatting options like you've never done before
|
27
27
|
email:
|
28
28
|
executables: []
|
29
29
|
extensions: []
|
@@ -56,6 +56,7 @@ files:
|
|
56
56
|
- lib/yell/logger.rb
|
57
57
|
- lib/yell/version.rb
|
58
58
|
- spec/spec_helper.rb
|
59
|
+
- spec/yell/adapters/base_spec.rb
|
59
60
|
- spec/yell/event_spec.rb
|
60
61
|
- spec/yell/formatter_spec.rb
|
61
62
|
- spec/yell/level_spec.rb
|
@@ -88,6 +89,7 @@ specification_version: 3
|
|
88
89
|
summary: Yell - Your Extensible Logging Library
|
89
90
|
test_files:
|
90
91
|
- spec/spec_helper.rb
|
92
|
+
- spec/yell/adapters/base_spec.rb
|
91
93
|
- spec/yell/event_spec.rb
|
92
94
|
- spec/yell/formatter_spec.rb
|
93
95
|
- spec/yell/level_spec.rb
|