logging 0.3.1 → 0.4.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/README.txt +5 -1
- data/lib/logging/appenders/console.rb +5 -7
- data/lib/logging/appenders/io.rb +2 -1
- data/lib/logging/appenders/rolling_file.rb +64 -17
- data/lib/logging/layout.rb +2 -1
- data/lib/logging/layouts/pattern.rb +15 -4
- data/lib/logging/logger.rb +2 -2
- data/lib/logging/repository.rb +15 -1
- data/lib/logging.rb +100 -3
- data/test/appenders/test_rolling_file.rb +47 -6
- data/test/benchmark.rb +4 -5
- data/test/test_logger.rb +15 -1
- data/test/test_logging.rb +55 -1
- data/test/test_repository.rb +13 -1
- metadata +2 -2
data/README.txt
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
--
|
2
|
-
$Id: README.txt
|
2
|
+
$Id: README.txt 35 2007-03-21 19:32:32Z tim_pease $
|
3
3
|
++
|
4
4
|
|
5
5
|
= Logging
|
6
6
|
|
7
|
+
A logging framework for Ruby in the spirit of Java's Log4j.
|
8
|
+
|
9
|
+
Logging provides an easy to use logging system with fine-grained control over log statements, multiple logging destinations, rolling log files, user defined log levels and much more.
|
10
|
+
|
7
11
|
obtaining a logger
|
8
12
|
where to log
|
9
13
|
log statements
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: console.rb
|
1
|
+
# $Id: console.rb 32 2007-02-22 23:32:17Z tim_pease $
|
2
2
|
|
3
3
|
require 'logging/appenders/io'
|
4
4
|
|
@@ -15,12 +15,11 @@ module Appenders
|
|
15
15
|
# Stdout.new
|
16
16
|
# Stdout.new( :layout => layout )
|
17
17
|
#
|
18
|
-
# Creates a new Stdout Appender. The name 'stdout' will always be used
|
19
|
-
# this appender.
|
18
|
+
# Creates a new Stdout Appender. The name 'stdout' will always be used
|
19
|
+
# for this appender.
|
20
20
|
#
|
21
21
|
def initialize( name = nil, opts = {} )
|
22
22
|
name ||= 'stdout'
|
23
|
-
STDOUT.sync = true
|
24
23
|
super(name, STDOUT, opts)
|
25
24
|
end
|
26
25
|
end # class Stdout
|
@@ -35,12 +34,11 @@ module Appenders
|
|
35
34
|
# Stderr.new
|
36
35
|
# Stderr.new( :layout => layout )
|
37
36
|
#
|
38
|
-
# Creates a new Stderr Appender. The name 'stderr' will always be used
|
39
|
-
# this appender.
|
37
|
+
# Creates a new Stderr Appender. The name 'stderr' will always be used
|
38
|
+
# for this appender.
|
40
39
|
#
|
41
40
|
def initialize( name = nil, opts = {} )
|
42
41
|
name ||= 'stderr'
|
43
|
-
STDERR.sync = true
|
44
42
|
super(name, STDERR, opts)
|
45
43
|
end
|
46
44
|
end # class Stderr
|
data/lib/logging/appenders/io.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: rolling_file.rb
|
1
|
+
# $Id: rolling_file.rb 31 2007-02-22 23:16:17Z tim_pease $
|
2
2
|
|
3
3
|
require 'logging/appenders/file'
|
4
4
|
|
@@ -48,10 +48,11 @@ module Logging::Appenders
|
|
48
48
|
# layout will be used if none is given.
|
49
49
|
# [:truncate] When set to true any existing log files will be rolled
|
50
50
|
# immediately and a new, empty log file will be created.
|
51
|
-
# [:
|
51
|
+
# [:size] The maximum allowed size (in bytes) of a log file before
|
52
52
|
# it is rolled.
|
53
|
-
# [:
|
54
|
-
# rolled.
|
53
|
+
# [:age] The maximum age (in seconds) of a log file before it is
|
54
|
+
# rolled. The age can also be given as 'daily', 'weekly',
|
55
|
+
# or 'monthly'.
|
55
56
|
# [:keep] The number of rolled log files to keep.
|
56
57
|
#
|
57
58
|
def initialize( name, opts = {} )
|
@@ -74,14 +75,65 @@ module Logging::Appenders
|
|
74
75
|
roll_files if roll_now
|
75
76
|
|
76
77
|
# grab out our options
|
77
|
-
@
|
78
|
-
@
|
78
|
+
@size = opts.delete(:size) || opts.delete('size')
|
79
|
+
@size = Integer(@size) unless @size.nil?
|
79
80
|
|
80
|
-
|
81
|
-
|
82
|
-
|
81
|
+
code = 'def sufficiently_aged?() false end'
|
82
|
+
|
83
|
+
@age = opts.delete(:age) || opts.delete('age')
|
84
|
+
case @age
|
85
|
+
when 'daily'
|
86
|
+
@start_time = Time.now
|
87
|
+
code = <<-CODE
|
88
|
+
def sufficiently_aged?
|
89
|
+
now = Time.now
|
90
|
+
if (now.day != @start_time.day) or (now - @start_time) > 86400
|
91
|
+
@start_time = now
|
92
|
+
return true
|
93
|
+
end
|
94
|
+
false
|
95
|
+
end
|
96
|
+
CODE
|
97
|
+
when 'weekly'
|
98
|
+
@start_time = Time.now
|
99
|
+
code = <<-CODE
|
100
|
+
def sufficiently_aged?
|
101
|
+
now = Time.now
|
102
|
+
if (now - @start_time) > 604800
|
103
|
+
@start_time = now
|
104
|
+
return true
|
105
|
+
end
|
106
|
+
false
|
107
|
+
end
|
108
|
+
CODE
|
109
|
+
when 'monthly'
|
110
|
+
@start_time = Time.now
|
111
|
+
code = <<-CODE
|
112
|
+
def sufficiently_aged?
|
113
|
+
now = Time.now
|
114
|
+
if (now.month != @start_time.month) or (now - @start_time) > 2678400
|
115
|
+
@start_time = now
|
116
|
+
return true
|
117
|
+
end
|
118
|
+
false
|
119
|
+
end
|
120
|
+
CODE
|
121
|
+
when Integer, String
|
122
|
+
@age = Integer(@age)
|
83
123
|
@start_time = Time.now
|
124
|
+
code = <<-CODE
|
125
|
+
def sufficiently_aged?
|
126
|
+
now = Time.now
|
127
|
+
if (now - @start_time) > @age
|
128
|
+
@start_time = now
|
129
|
+
return true
|
130
|
+
end
|
131
|
+
false
|
132
|
+
end
|
133
|
+
CODE
|
84
134
|
end
|
135
|
+
meta = class << self; self end
|
136
|
+
meta.class_eval code
|
85
137
|
|
86
138
|
@file_size = (::File.exist?(@fn) ? ::File.size(@fn) : 0)
|
87
139
|
super(name, opts)
|
@@ -112,7 +164,7 @@ module Logging::Appenders
|
|
112
164
|
def roll
|
113
165
|
begin; @io.close; rescue; end
|
114
166
|
roll_files
|
115
|
-
@io = ::File.new(@fn, '
|
167
|
+
@io = ::File.new(@fn, 'a')
|
116
168
|
end
|
117
169
|
|
118
170
|
#
|
@@ -123,18 +175,13 @@ module Logging::Appenders
|
|
123
175
|
#
|
124
176
|
def roll_required?
|
125
177
|
# check if max size has been exceeded
|
126
|
-
if @
|
178
|
+
if @size and @file_size > @size
|
127
179
|
@file_size = 0
|
128
180
|
return true
|
129
181
|
end
|
130
182
|
|
131
183
|
# check if max age has been exceeded
|
132
|
-
|
133
|
-
@start_time = Time.now
|
134
|
-
return true
|
135
|
-
end
|
136
|
-
|
137
|
-
false
|
184
|
+
return sufficiently_aged?
|
138
185
|
end
|
139
186
|
|
140
187
|
#
|
data/lib/logging/layout.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: layout.rb
|
1
|
+
# $Id: layout.rb 33 2007-02-28 18:29:09Z tim_pease $
|
2
2
|
|
3
3
|
require 'yaml'
|
4
4
|
require 'logging'
|
@@ -88,6 +88,7 @@ module Logging
|
|
88
88
|
str << "\n\t" << obj.backtrace.join("\n\t")
|
89
89
|
end
|
90
90
|
str
|
91
|
+
when nil: "<#{obj.class.name}> nil"
|
91
92
|
else
|
92
93
|
str = "<#{obj.class.name}> "
|
93
94
|
str << case @obj_format
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: pattern.rb
|
1
|
+
# $Id: pattern.rb 33 2007-02-28 18:29:09Z tim_pease $
|
2
2
|
|
3
3
|
require 'logging'
|
4
4
|
require 'logging/layout'
|
@@ -154,9 +154,20 @@ module Layouts
|
|
154
154
|
#
|
155
155
|
def self.create_date_format_methods( pf )
|
156
156
|
code = "undef :format_date if method_defined? :format_date\n"
|
157
|
-
code << "def format_date\
|
158
|
-
|
159
|
-
|
157
|
+
code << "def format_date\n"
|
158
|
+
if pf.date_method.nil?
|
159
|
+
if pf.date_pattern =~ %r/%s/
|
160
|
+
code << <<-CODE
|
161
|
+
now = Time.now
|
162
|
+
dp = '#{pf.date_pattern}'.gsub('%s','%06d' % now.usec)
|
163
|
+
now.strftime dp
|
164
|
+
CODE
|
165
|
+
else
|
166
|
+
code << "Time.now.strftime '#{pf.date_pattern}'\n"
|
167
|
+
end
|
168
|
+
else
|
169
|
+
code << "Time.now.#{pf.date_method}\n"
|
170
|
+
end
|
160
171
|
code << "end\n"
|
161
172
|
|
162
173
|
pf.meta_eval code
|
data/lib/logging/logger.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: logger.rb
|
1
|
+
# $Id: logger.rb 33 2007-02-28 18:29:09Z tim_pease $
|
2
2
|
|
3
3
|
require 'thread'
|
4
4
|
require 'logging'
|
@@ -107,7 +107,7 @@ module Logging
|
|
107
107
|
def #{name}?( ) true end
|
108
108
|
def #{name}( data = nil )
|
109
109
|
data = yield if block_given?
|
110
|
-
log_event(::Logging::LogEvent.new(@name, #{num}, data, @trace))
|
110
|
+
log_event(::Logging::LogEvent.new(@name, #{num}, data, @trace))
|
111
111
|
true
|
112
112
|
end
|
113
113
|
CODE
|
data/lib/logging/repository.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: repository.rb
|
1
|
+
# $Id: repository.rb 31 2007-02-22 23:16:17Z tim_pease $
|
2
2
|
|
3
3
|
require 'singleton'
|
4
4
|
require 'logging/root_logger'
|
@@ -78,6 +78,20 @@ module Logging
|
|
78
78
|
#
|
79
79
|
def fetch( key ) @h.fetch(to_key(key)) end
|
80
80
|
|
81
|
+
#
|
82
|
+
# call-seq:
|
83
|
+
# has_logger?( name )
|
84
|
+
#
|
85
|
+
# Returns +true+ if the given logger exists in the repository. Returns
|
86
|
+
# +false+ if this is not the case.
|
87
|
+
#
|
88
|
+
# When _name_ is a +String+ or a +Symbol+ it will be used "as is" to
|
89
|
+
# retrieve the logger. When _name_ is a +Class+ the class name will be
|
90
|
+
# used to retrieve the logger. When _name_ is an object the name of the
|
91
|
+
# object's class will be used to retrieve the logger.
|
92
|
+
#
|
93
|
+
def has_logger?( key ) @h.has_key?(to_key(key)) end
|
94
|
+
|
81
95
|
#
|
82
96
|
# call-seq:
|
83
97
|
# parent( key )
|
data/lib/logging.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: logging.rb
|
1
|
+
# $Id: logging.rb 35 2007-03-21 19:32:32Z tim_pease $
|
2
2
|
|
3
3
|
require 'logging/repository'
|
4
4
|
|
@@ -42,7 +42,104 @@ module Logging
|
|
42
42
|
|
43
43
|
#
|
44
44
|
# call-seq:
|
45
|
-
#
|
45
|
+
# Logging.logger( device, age = 7, size = 1048576 )
|
46
|
+
# Logging.logger( device, age = 'weekly' )
|
47
|
+
#
|
48
|
+
# This convenience method returns a Logger instance configured to behave
|
49
|
+
# similarly to a core Ruby Logger instance.
|
50
|
+
#
|
51
|
+
# The _device_ is the logging destination. This can be a filename
|
52
|
+
# (String) or an IO object (STDERR, STDOUT, an open File, etc.). The
|
53
|
+
# _age_ is the number of old log files to keep or the frequency of
|
54
|
+
# rotation (+daily+, +weekly+, or +monthly+). The _size_ is the maximum
|
55
|
+
# logfile size and is only used when _age_ is a number.
|
56
|
+
#
|
57
|
+
# Using the same _device_ twice will result in the same Logger instance
|
58
|
+
# being returned. For example, if a Logger is created using STDOUT then
|
59
|
+
# the same Logger instance will be returned the next time STDOUT is
|
60
|
+
# used. A new Logger instance can be obtained by closing the previous
|
61
|
+
# logger instance.
|
62
|
+
#
|
63
|
+
# log1 = Logging.logger(STDOUT)
|
64
|
+
# log2 = Logging.logger(STDOUT)
|
65
|
+
# log1.object_id == log2.object_id #=> true
|
66
|
+
#
|
67
|
+
# log1.close
|
68
|
+
# log2 = Logging.logger(STDOUT)
|
69
|
+
# log1.object_id == log2.object_id #=> false
|
70
|
+
#
|
71
|
+
# The format of the log messages can be changed using a few optional
|
72
|
+
# parameters. The <tt>:pattern</tt> can be used to change the log
|
73
|
+
# message format. The <tt>:date_pattern</tt> can be used to change how
|
74
|
+
# timestamps are formatted.
|
75
|
+
#
|
76
|
+
# log = Logging.logger(STDOUT,
|
77
|
+
# :pattern => "[%d] %-5l : %m\n",
|
78
|
+
# :date_pattern => "%Y-%m-%d %H:%M:%S.%s")
|
79
|
+
#
|
80
|
+
# See the documentation for the Logging::Layouts::Pattern class for a
|
81
|
+
# full description of the :pattern and :date_pattern formatting strings.
|
82
|
+
#
|
83
|
+
def logger( *args )
|
84
|
+
opts = args.pop if Hash === args.last
|
85
|
+
opts ||= Hash.new
|
86
|
+
|
87
|
+
dev = args.shift
|
88
|
+
keep = age = args.shift
|
89
|
+
size = args.shift
|
90
|
+
|
91
|
+
name = case dev
|
92
|
+
when String: dev
|
93
|
+
when File: dev.path
|
94
|
+
else dev.object_id.to_s end
|
95
|
+
|
96
|
+
repo = ::Logging::Repository.instance
|
97
|
+
return repo[name] if repo.has_logger? name
|
98
|
+
|
99
|
+
l_opts = {
|
100
|
+
:pattern => "%.1l, [%d #%p] %#{::Logging::MAX_LEVEL_LENGTH}l : %m\n",
|
101
|
+
:date_pattern => '%Y-%m-%dT%H:%M:%S.%s'
|
102
|
+
}
|
103
|
+
[:pattern, :date_pattern, :date_method].each do |o|
|
104
|
+
l_opts[o] = opts.delete(o) if opts.has_key? o
|
105
|
+
end
|
106
|
+
layout = ::Logging::Layouts::Pattern.new(l_opts)
|
107
|
+
|
108
|
+
a_opts = Hash.new
|
109
|
+
a_opts[:size] = size if Fixnum === size
|
110
|
+
a_opts[:age] = age if String === age
|
111
|
+
a_opts[:keep] = keep if Fixnum === keep
|
112
|
+
a_opts[:filename] = dev if String === dev
|
113
|
+
a_opts[:layout] = layout
|
114
|
+
a_opts.merge! opts
|
115
|
+
|
116
|
+
appender =
|
117
|
+
case dev
|
118
|
+
when String
|
119
|
+
::Logging::Appenders::RollingFile.new(name, a_opts)
|
120
|
+
else
|
121
|
+
::Logging::Appenders::IO.new(name, dev, a_opts)
|
122
|
+
end
|
123
|
+
|
124
|
+
logger = ::Logging::Logger.new(name)
|
125
|
+
logger.add appender
|
126
|
+
logger.additive = false
|
127
|
+
|
128
|
+
class << logger
|
129
|
+
def close
|
130
|
+
@appenders.each {|a| a.close}
|
131
|
+
h = ::Logging::Repository.instance.instance_variable_get :@h
|
132
|
+
h.delete(@name)
|
133
|
+
class << self; undef :close; end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
logger
|
138
|
+
end
|
139
|
+
|
140
|
+
#
|
141
|
+
# call-seq:
|
142
|
+
# Logging.define_levels( levels )
|
46
143
|
#
|
47
144
|
# Defines the levels available to the loggers. The _levels_ is an array
|
48
145
|
# of strings and symbols. Each element in the array is downcased and
|
@@ -103,7 +200,7 @@ module Logging
|
|
103
200
|
|
104
201
|
#
|
105
202
|
# call-seq:
|
106
|
-
# format_as( obj_format )
|
203
|
+
# Logging.format_as( obj_format )
|
107
204
|
#
|
108
205
|
# Defines the default _obj_format_ method to use when converting objects
|
109
206
|
# into string representations for logging. _obj_format_ can be one of
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: test_rolling_file.rb
|
1
|
+
# $Id: test_rolling_file.rb 31 2007-02-22 23:16:17Z tim_pease $
|
2
2
|
|
3
3
|
require 'test/setup.rb'
|
4
4
|
require 'fileutils'
|
@@ -93,12 +93,16 @@ module TestAppenders
|
|
93
93
|
cleanup
|
94
94
|
end
|
95
95
|
|
96
|
-
def
|
96
|
+
def test_age
|
97
97
|
assert_equal [], Dir.glob(@glob)
|
98
98
|
|
99
|
-
|
100
|
-
|
99
|
+
assert_raise(ArgumentError) do
|
100
|
+
::Logging::Appenders::RollingFile.new(
|
101
|
+
NAME, :filename => @fn, :age => 'bob')
|
102
|
+
end
|
101
103
|
|
104
|
+
ap = ::Logging::Appenders::RollingFile.new(NAME,
|
105
|
+
:filename => @fn, :age => 1)
|
102
106
|
ap << "random message\n"
|
103
107
|
assert_equal 1, Dir.glob(@glob).length
|
104
108
|
|
@@ -107,13 +111,50 @@ module TestAppenders
|
|
107
111
|
assert_equal 2, Dir.glob(@glob).length
|
108
112
|
|
109
113
|
cleanup
|
114
|
+
ap = ::Logging::Appenders::RollingFile.new(NAME,
|
115
|
+
:filename => @fn, 'age' => 'daily')
|
116
|
+
ap << "random message\n"
|
117
|
+
assert_equal 2, Dir.glob(@glob).length
|
118
|
+
|
119
|
+
t = ap.instance_variable_get :@start_time
|
120
|
+
ap.instance_variable_set :@start_time, t - 3600 * 24
|
121
|
+
|
122
|
+
sleep 0.250
|
123
|
+
ap << "yet another random message\n"
|
124
|
+
assert_equal 3, Dir.glob(@glob).length
|
125
|
+
|
126
|
+
cleanup
|
127
|
+
ap = ::Logging::Appenders::RollingFile.new(NAME,
|
128
|
+
:filename => @fn, :age => 'weekly')
|
129
|
+
ap << "random message\n"
|
130
|
+
assert_equal 3, Dir.glob(@glob).length
|
131
|
+
|
132
|
+
t = ap.instance_variable_get :@start_time
|
133
|
+
ap.instance_variable_set :@start_time, t - 3600 * 24 * 7
|
134
|
+
|
135
|
+
sleep 0.250
|
136
|
+
ap << "yet another random message\n"
|
137
|
+
assert_equal 4, Dir.glob(@glob).length
|
138
|
+
|
139
|
+
cleanup
|
140
|
+
ap = ::Logging::Appenders::RollingFile.new(NAME,
|
141
|
+
:filename => @fn, :age => 'monthly')
|
142
|
+
ap << "random message\n"
|
143
|
+
assert_equal 4, Dir.glob(@glob).length
|
144
|
+
|
145
|
+
t = ap.instance_variable_get :@start_time
|
146
|
+
ap.instance_variable_set :@start_time, t - 3600 * 24 * 31
|
147
|
+
|
148
|
+
sleep 0.250
|
149
|
+
ap << "yet another random message\n"
|
150
|
+
assert_equal 5, Dir.glob(@glob).length
|
110
151
|
end
|
111
152
|
|
112
|
-
def
|
153
|
+
def test_size
|
113
154
|
assert_equal [], Dir.glob(@glob)
|
114
155
|
|
115
156
|
ap = ::Logging::Appenders::RollingFile.new(NAME,
|
116
|
-
:filename => @fn, :
|
157
|
+
:filename => @fn, :size => 100)
|
117
158
|
|
118
159
|
ap << 'X' * 100; ap.flush
|
119
160
|
assert_equal 1, Dir.glob(@glob).length
|
data/test/benchmark.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: benchmark.rb
|
1
|
+
# $Id: benchmark.rb 34 2007-02-28 21:42:41Z tim_pease $
|
2
2
|
|
3
3
|
begin
|
4
4
|
require 'logging'
|
@@ -23,13 +23,12 @@ module Logging
|
|
23
23
|
class Benchmark
|
24
24
|
|
25
25
|
def run
|
26
|
-
this_many =
|
26
|
+
this_many = 300_000
|
27
27
|
|
28
28
|
sio = StringIO.new
|
29
29
|
|
30
|
-
::Logging
|
31
|
-
logging =
|
32
|
-
logging.add ::Logging::Appenders::IO.new('benchmark', sio)
|
30
|
+
logging = ::Logging.logger sio
|
31
|
+
logging.level = :warn
|
33
32
|
|
34
33
|
logger = ::Logger.new sio
|
35
34
|
logger.level = ::Logger::WARN
|
data/test/test_logger.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: test_logger.rb
|
1
|
+
# $Id: test_logger.rb 33 2007-02-28 18:29:09Z tim_pease $
|
2
2
|
|
3
3
|
require 'test/setup.rb'
|
4
4
|
require 'stringio'
|
@@ -313,16 +313,30 @@ module TestLogging
|
|
313
313
|
|
314
314
|
assert_equal false, log.debug
|
315
315
|
assert_equal true, log.info
|
316
|
+
assert_equal " INFO A Logger : <NilClass> nil\n", a1.readline
|
317
|
+
assert_equal " INFO A Logger : <NilClass> nil\n", a2.readline
|
316
318
|
assert_equal true, log.warn
|
319
|
+
assert_equal " WARN A Logger : <NilClass> nil\n", a1.readline
|
320
|
+
assert_equal " WARN A Logger : <NilClass> nil\n", a2.readline
|
317
321
|
assert_equal true, log.error
|
322
|
+
assert_equal "ERROR A Logger : <NilClass> nil\n", a1.readline
|
323
|
+
assert_equal "ERROR A Logger : <NilClass> nil\n", a2.readline
|
318
324
|
assert_equal true, log.fatal
|
325
|
+
assert_equal "FATAL A Logger : <NilClass> nil\n", a1.readline
|
326
|
+
assert_equal "FATAL A Logger : <NilClass> nil\n", a2.readline
|
319
327
|
|
320
328
|
log.level = :warn
|
321
329
|
assert_equal false, log.debug
|
322
330
|
assert_equal false, log.info
|
323
331
|
assert_equal true, log.warn
|
332
|
+
assert_equal " WARN A Logger : <NilClass> nil\n", a1.readline
|
333
|
+
assert_equal " WARN A Logger : <NilClass> nil\n", a2.readline
|
324
334
|
assert_equal true, log.error
|
335
|
+
assert_equal "ERROR A Logger : <NilClass> nil\n", a1.readline
|
336
|
+
assert_equal "ERROR A Logger : <NilClass> nil\n", a2.readline
|
325
337
|
assert_equal true, log.fatal
|
338
|
+
assert_equal "FATAL A Logger : <NilClass> nil\n", a1.readline
|
339
|
+
assert_equal "FATAL A Logger : <NilClass> nil\n", a2.readline
|
326
340
|
|
327
341
|
assert_raise(NoMethodError) {log.critical 'this log level does not exist'}
|
328
342
|
|
data/test/test_logging.rb
CHANGED
@@ -1,16 +1,30 @@
|
|
1
|
-
# $Id: test_logging.rb
|
1
|
+
# $Id: test_logging.rb 34 2007-02-28 21:42:41Z tim_pease $
|
2
2
|
|
3
3
|
require 'test/setup.rb'
|
4
|
+
require 'fileutils'
|
4
5
|
|
5
6
|
module TestLogging
|
6
7
|
|
7
8
|
class TestLogging < Test::Unit::TestCase
|
8
9
|
include LoggingTestCase
|
9
10
|
|
11
|
+
TMP = 'tmp'
|
12
|
+
|
10
13
|
def setup
|
11
14
|
super
|
12
15
|
@levels = ::Logging::LEVELS
|
13
16
|
@lnames = ::Logging::LNAMES
|
17
|
+
|
18
|
+
FileUtils.rm_rf TMP
|
19
|
+
FileUtils.mkdir(TMP)
|
20
|
+
@fn = File.join(TMP, 'test.log')
|
21
|
+
@glob = File.join(TMP, '*.log')
|
22
|
+
end
|
23
|
+
|
24
|
+
def teardown
|
25
|
+
h = ::Logging::Repository.instance.instance_variable_get :@h
|
26
|
+
h.values.each {|l| l.close if l.respond_to? :close}
|
27
|
+
FileUtils.rm_rf TMP
|
14
28
|
end
|
15
29
|
|
16
30
|
def test_configure
|
@@ -78,6 +92,46 @@ module TestLogging
|
|
78
92
|
File.delete('temp.log') if File.exist?('temp.log')
|
79
93
|
end
|
80
94
|
|
95
|
+
def test_logger
|
96
|
+
assert_raise(TypeError) {::Logging.logger []}
|
97
|
+
|
98
|
+
logger = ::Logging.logger STDOUT
|
99
|
+
assert_match %r/\A-?\d+\z/, logger.name
|
100
|
+
assert_same logger, ::Logging.logger(STDOUT)
|
101
|
+
|
102
|
+
logger.close
|
103
|
+
assert !STDOUT.closed?
|
104
|
+
|
105
|
+
assert !File.exist?(@fn)
|
106
|
+
fd = File.new @fn, 'w'
|
107
|
+
logger = ::Logging.logger fd, 2, 100
|
108
|
+
assert_equal @fn, logger.name
|
109
|
+
logger.debug 'this is a debug message'
|
110
|
+
logger.warn 'this is a warning message'
|
111
|
+
logger.error 'and now we should have over 100 bytes of data ' +
|
112
|
+
'in the log file'
|
113
|
+
logger.info 'but the log file should not roll since we provided ' +
|
114
|
+
'a file descriptor -- not a file name'
|
115
|
+
logger.close
|
116
|
+
assert fd.closed?
|
117
|
+
assert File.exist?(@fn)
|
118
|
+
assert_equal 1, Dir.glob(@glob).length
|
119
|
+
|
120
|
+
FileUtils.rm_f @fn
|
121
|
+
assert !File.exist?(@fn)
|
122
|
+
logger = ::Logging.logger @fn, 2, 100
|
123
|
+
assert File.exist?(@fn)
|
124
|
+
assert_equal @fn, logger.name
|
125
|
+
logger.debug 'this is a debug message'
|
126
|
+
logger.warn 'this is a warning message'
|
127
|
+
logger.error 'and now we should have over 100 bytes of data ' +
|
128
|
+
'in the log file'
|
129
|
+
logger.info 'but the log file should not roll since we provided ' +
|
130
|
+
'a file descriptor -- not a file name'
|
131
|
+
logger.close
|
132
|
+
assert_equal 3, Dir.glob(@glob).length
|
133
|
+
end
|
134
|
+
|
81
135
|
def test_define_levels_default
|
82
136
|
empty = {}
|
83
137
|
assert_equal empty, @levels
|
data/test/test_repository.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: test_repository.rb
|
1
|
+
# $Id: test_repository.rb 31 2007-02-22 23:16:17Z tim_pease $
|
2
2
|
|
3
3
|
require 'test/setup.rb'
|
4
4
|
|
@@ -47,6 +47,18 @@ module TestLogging
|
|
47
47
|
assert_same @repo[:root], @repo.fetch(:root)
|
48
48
|
end
|
49
49
|
|
50
|
+
def test_fetch
|
51
|
+
assert @repo.has_logger?(:root)
|
52
|
+
assert !@repo.has_logger?('A')
|
53
|
+
|
54
|
+
%w(A A::B A::B::C::D A::B::C::E A::B::C::F).each do |name|
|
55
|
+
::Logging::Logger.new(name)
|
56
|
+
end
|
57
|
+
|
58
|
+
assert @repo.has_logger?('A')
|
59
|
+
assert @repo.has_logger?('A::B')
|
60
|
+
end
|
61
|
+
|
50
62
|
def test_parent
|
51
63
|
%w(A A::B A::B::C::D A::B::C::E A::B::C::F).each do |name|
|
52
64
|
::Logging::Logger.new(name)
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.1
|
|
3
3
|
specification_version: 1
|
4
4
|
name: logging
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2007-
|
6
|
+
version: 0.4.0
|
7
|
+
date: 2007-03-21 00:00:00 -06:00
|
8
8
|
summary: A flexible and extendable logging library for Ruby.
|
9
9
|
require_paths:
|
10
10
|
- lib
|