logging 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,32 @@
1
+ == 0.5.0 / 2007-11-18
2
+
3
+ * Added the ability to log via the syslog daemon
4
+ * Can send messages to the Growl notification system on Mac OS X
5
+ * The Growl appender can coalesce messages of the same title/priority
6
+
7
+ == 0.4.0 / 2007-03-21
8
+
9
+ * Added a microsecond flag to the Pattern layout
10
+ * All appenders write immediately upon receipt of a logging event
11
+ * Added a basic logging method tha returns a logger object configured in the
12
+ same manner as the standard Ruby logger
13
+ * Fixed a bug caused by nil log messages
14
+
15
+ == 0.3.1 / 2007-02-08
16
+
17
+ * Bugfix Release
18
+
19
+ == 0.3.0 / 2007-02-01
20
+
21
+ * Remove the ability to log multiple objects from a single log method call
22
+
23
+ == 0.2.0 / 2007-01-29
24
+
25
+ * The "once every four years" release
26
+ * Storage and retrieveal of appenders by name
27
+ * YAML configuration support
28
+ * Rolling file appender
29
+
30
+ == 0.1.0 / 2007-01-12
31
+
32
+ * Birthday!
@@ -0,0 +1,46 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.txt
4
+ Rakefile
5
+ data/logging.yaml
6
+ lib/logging.rb
7
+ lib/logging/appender.rb
8
+ lib/logging/appenders/console.rb
9
+ lib/logging/appenders/file.rb
10
+ lib/logging/appenders/growl.rb
11
+ lib/logging/appenders/io.rb
12
+ lib/logging/appenders/rolling_file.rb
13
+ lib/logging/appenders/static_appender.rb
14
+ lib/logging/appenders/syslog.rb
15
+ lib/logging/config/yaml_configurator.rb
16
+ lib/logging/layout.rb
17
+ lib/logging/layouts/basic.rb
18
+ lib/logging/layouts/pattern.rb
19
+ lib/logging/log_event.rb
20
+ lib/logging/logger.rb
21
+ lib/logging/repository.rb
22
+ lib/logging/root_logger.rb
23
+ tasks/doc.rake
24
+ tasks/gem.rake
25
+ tasks/manifest.rake
26
+ tasks/rubyforge.rake
27
+ tasks/setup.rb
28
+ tasks/test.rake
29
+ tasks/website.rake
30
+ test/appenders/test_console.rb
31
+ test/appenders/test_file.rb
32
+ test/appenders/test_io.rb
33
+ test/appenders/test_rolling_file.rb
34
+ test/appenders/test_syslog.rb
35
+ test/benchmark.rb
36
+ test/config/test_yaml_configurator.rb
37
+ test/layouts/test_basic.rb
38
+ test/layouts/test_pattern.rb
39
+ test/setup.rb
40
+ test/test_appender.rb
41
+ test/test_layout.rb
42
+ test/test_log_event.rb
43
+ test/test_logger.rb
44
+ test/test_logging.rb
45
+ test/test_repository.rb
46
+ test/test_root_logger.rb
data/README.txt CHANGED
@@ -1,15 +1,89 @@
1
- --
2
- $Id: README.txt 35 2007-03-21 19:32:32Z tim_pease $
3
- ++
1
+ Logging
4
2
 
5
- = Logging
3
+ * {Homepage}[http://logging.rubyforge.org/]
4
+ * {Rubyforge Project}[http://rubyforge.org/projects/logging]
5
+ * email tim dot pease at gmail dot com
6
6
 
7
- A logging framework for Ruby in the spirit of Java's Log4j.
7
+ == DESCRIPTION:
8
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.
9
+ Logging is a flexible logging library for use in Ruby programs based on the
10
+ design of Java's log4j library. It features a hierarchical logging system,
11
+ custom level names, multiple output destinations per log event, custom
12
+ formatting, and more.
10
13
 
11
- obtaining a logger
12
- where to log
13
- log statements
14
- changing the log level
15
-
14
+ == INSTALL:
15
+
16
+ sudo gem install logging
17
+
18
+ == EXAMPLE:
19
+
20
+ This example configures a logger to output messages in a format similar to the
21
+ core ruby Logger class. Only log messages that are warnings or higher will be
22
+ logged.
23
+
24
+ require 'logging'
25
+
26
+ logger = Logging.logger(STDOUT)
27
+ logger.level = :warn
28
+
29
+ logger.debug "this debug message will not be output by the logger"
30
+ logger.warn "this is your last warning"
31
+
32
+ In this example, a single logger is crated that will append to STDOUT and to a file. Only log messages that are informational or higher will be logged.
33
+
34
+ reqruie 'logging'
35
+
36
+ logger = Logging::Logger['example_logger']
37
+ logger.add Logging::Appender.stdout
38
+ logger.add Logging::Appenders::File.new('example.log')
39
+ logger.level = :info
40
+
41
+ logger.debug "this debug message will not be output by the logger"
42
+ logger.info "just some friendly advice"
43
+
44
+ The Logging library was created to allow each class in a program to have its
45
+ own configurable logger. The logging level for a particular class can be
46
+ changed independently of all other loggers in the system. This example shows
47
+ the recommended way of accomplishing this.
48
+
49
+ require 'logging'
50
+
51
+ Logging::Logger['FirstClass'].level = :warn
52
+ Logging::Logger['SecondClass'].level = :debug
53
+
54
+ class FirstClass
55
+ def initialize
56
+ @log = Logging::Logger[self]
57
+ end
58
+
59
+ def some_method
60
+ @log.debug = "some method was called on #{self.inspect}"
61
+ end
62
+ end
63
+
64
+ class SecondClass
65
+ def initialize
66
+ @log = Logging::Logger[self]
67
+ end
68
+
69
+ def another_method
70
+ @log.debug = "another method was called on #{self.inspect}"
71
+ end
72
+ end
73
+
74
+ == NOTES:
75
+
76
+ Although Logging is intended to supersede Log4r, it is not a one-to-one
77
+ replacement for the Log4r library. Most notably is the difference in namespaces
78
+ -- Logging vs. Log4r. Other differences include renaming Log4r::Outputter to
79
+ Logging::Appender and renaming Log4r::Formatter to Logging::Layout. These
80
+ changes were meant to bring the Logging class names more in line with the Log4j
81
+ class names.
82
+
83
+ == REQUIREMENTS:
84
+
85
+ Logging does not depend on any other installed libraries or gems.
86
+
87
+ == LICENSE:
88
+
89
+ Ruby
@@ -0,0 +1,29 @@
1
+ # $Id$
2
+
3
+ load './tasks/setup.rb'
4
+ ensure_in_path 'lib'
5
+
6
+ require 'logging'
7
+
8
+ task :default => 'test:run'
9
+
10
+ PROJ.name = 'logging'
11
+ PROJ.summary = 'A flexible and extendable logging library for Ruby'
12
+ PROJ.authors = 'Tim Pease'
13
+ PROJ.email = 'tim.pease@gmail.com'
14
+ PROJ.url = 'http://logging.rubyforge.org/'
15
+ PROJ.description = paragraphs_of('README.txt', 3).join("\n\n")
16
+ PROJ.changes = paragraphs_of('History.txt', 0..1).join("\n\n")
17
+ PROJ.rubyforge_name = 'logging'
18
+ PROJ.rdoc_dir = 'doc/rdoc'
19
+ #PROJ.rdoc_remote_dir = 'rdoc'
20
+ PROJ.rdoc_remote_dir = ''
21
+ PROJ.version = Logging::VERSION
22
+
23
+ PROJ.exclude << '^(\.\/|\/)?website/output'
24
+ PROJ.exclude << '^(\.\/|\/)?doc'
25
+ PROJ.exclude << '^(\.\/|\/)?tags$'
26
+ PROJ.rdoc_exclude << '^(\.\/|\/)?data'
27
+ PROJ.rdoc_exclude << '^(\.\/|\/)?website'
28
+
29
+ # EOF
File without changes
@@ -1,12 +1,14 @@
1
- # $Id: logging.rb 35 2007-03-21 19:32:32Z tim_pease $
1
+ # $Id: logging.rb 47 2007-11-13 05:14:55Z tim_pease $
2
2
 
3
3
  require 'logging/repository'
4
4
 
5
5
  # require all appenders
6
6
  require 'logging/appenders/console'
7
7
  require 'logging/appenders/file'
8
+ require 'logging/appenders/growl'
8
9
  require 'logging/appenders/rolling_file'
9
10
  require 'logging/appenders/static_appender'
11
+ require 'logging/appenders/syslog'
10
12
 
11
13
  # require all layouts
12
14
  require 'logging/layouts/basic'
@@ -16,16 +18,17 @@ require 'logging/layouts/pattern'
16
18
  require 'logging/config/yaml_configurator'
17
19
 
18
20
 
19
- #
20
21
  #
21
22
  #
22
23
  module Logging
23
24
 
25
+ VERSION = '0.5.0' # :nodoc:
26
+
24
27
  LEVELS = {} # :nodoc:
25
28
  LNAMES = {} # :nodoc:
26
29
 
27
30
  class << self
28
- #
31
+
29
32
  # call-seq:
30
33
  # Logging.configure( filename )
31
34
  #
@@ -40,7 +43,6 @@ module Logging
40
43
  else raise ArgumentError, 'unknown configuration file format' end
41
44
  end
42
45
 
43
- #
44
46
  # call-seq:
45
47
  # Logging.logger( device, age = 7, size = 1048576 )
46
48
  # Logging.logger( device, age = 'weekly' )
@@ -137,7 +139,6 @@ module Logging
137
139
  logger
138
140
  end
139
141
 
140
- #
141
142
  # call-seq:
142
143
  # Logging.define_levels( levels )
143
144
  #
@@ -198,7 +199,6 @@ module Logging
198
199
  levels.keys
199
200
  end
200
201
 
201
- #
202
202
  # call-seq:
203
203
  # Logging.format_as( obj_format )
204
204
  #
@@ -225,6 +225,8 @@ module Logging
225
225
  end
226
226
 
227
227
  # :stopdoc:
228
+
229
+ # Convert the given level into a connaconical form - a lowercase string.
228
230
  def levelify( level )
229
231
  case level
230
232
  when String: level.downcase
@@ -232,6 +234,7 @@ module Logging
232
234
  else raise ArgumentError, "levels must be a String or Symbol" end
233
235
  end
234
236
 
237
+ # Convert the given level into a level number.
235
238
  def level_num( level )
236
239
  l = levelify level
237
240
  case l
@@ -239,6 +242,21 @@ module Logging
239
242
  when 'off': LEVELS.length
240
243
  else begin; Integer(l); rescue ArgumentError; LEVELS[l] end end
241
244
  end
245
+
246
+ # Helper method for retrieving options from a hash.
247
+ def options( opts = {} )
248
+ lambda do |*args|
249
+ keys, default, ignored = args
250
+ catch('opt') do
251
+ Array(keys).each do |key|
252
+ [key, key.to_s, key.to_s.intern].each do |key|
253
+ throw 'opt', opts[key] if opts.has_key?(key)
254
+ end
255
+ end
256
+ default
257
+ end
258
+ end
259
+ end
242
260
  # :startdoc:
243
261
  end
244
262
 
@@ -1,4 +1,4 @@
1
- # $Id: appender.rb 20 2007-01-26 20:18:42Z tim_pease $
1
+ # $Id: appender.rb 37 2007-10-26 19:12:44Z tim_pease $
2
2
 
3
3
  require 'thread'
4
4
  require 'logging'
@@ -8,7 +8,6 @@ require 'logging/layouts/basic'
8
8
 
9
9
  module Logging
10
10
 
11
- #
12
11
  # The +Appender+ class is provides methods for appending log events to a
13
12
  # logging destination. The log events are formatted into strings using a
14
13
  # Layout.
@@ -26,7 +25,6 @@ module Logging
26
25
 
27
26
  attr_reader :name, :layout, :level
28
27
 
29
- #
30
28
  # call-seq:
31
29
  # Appender.new( name )
32
30
  # Appender.new( name, :layout => layout )
@@ -52,7 +50,6 @@ module Logging
52
50
  ::Logging::Appender[@name] = self
53
51
  end
54
52
 
55
- #
56
53
  # call-seq:
57
54
  # append( event )
58
55
  #
@@ -69,7 +66,6 @@ module Logging
69
66
  self
70
67
  end
71
68
 
72
- #
73
69
  # call-seq:
74
70
  # appender << string
75
71
  #
@@ -86,7 +82,6 @@ module Logging
86
82
  self
87
83
  end
88
84
 
89
- #
90
85
  # call-seq:
91
86
  # level = :all
92
87
  #
@@ -129,7 +124,6 @@ module Logging
129
124
  @level = lvl
130
125
  end
131
126
 
132
- #
133
127
  # call-seq
134
128
  # appender.layout = Logging::Layouts::Basic.new
135
129
  #
@@ -143,7 +137,6 @@ module Logging
143
137
  @layout = layout
144
138
  end
145
139
 
146
- #
147
140
  # call-seq:
148
141
  # close( footer = true )
149
142
  #
@@ -159,7 +152,6 @@ module Logging
159
152
  self
160
153
  end
161
154
 
162
- #
163
155
  # call-seq:
164
156
  # closed?
165
157
  #
@@ -169,7 +161,6 @@ module Logging
169
161
  #
170
162
  def closed?( ) @closed end
171
163
 
172
- #
173
164
  # call-seq:
174
165
  # flush
175
166
  #
@@ -180,7 +171,7 @@ module Logging
180
171
 
181
172
 
182
173
  private
183
- #
174
+
184
175
  # call-seq:
185
176
  # write( str )
186
177
  #
@@ -189,7 +180,6 @@ module Logging
189
180
  #
190
181
  def write( str ) nil end
191
182
 
192
- #
193
183
  # call-seq:
194
184
  # sync { block }
195
185
  #
@@ -1,16 +1,14 @@
1
- # $Id: console.rb 32 2007-02-22 23:32:17Z tim_pease $
1
+ # $Id: console.rb 37 2007-10-26 19:12:44Z tim_pease $
2
2
 
3
3
  require 'logging/appenders/io'
4
4
 
5
5
  module Logging
6
6
  module Appenders
7
7
 
8
- #
9
8
  # This class provides an Appender that can write to STDOUT.
10
9
  #
11
- class Stdout< ::Logging::Appenders::IO
10
+ class Stdout < ::Logging::Appenders::IO
12
11
 
13
- #
14
12
  # call-seq:
15
13
  # Stdout.new
16
14
  # Stdout.new( :layout => layout )
@@ -24,12 +22,10 @@ module Appenders
24
22
  end
25
23
  end # class Stdout
26
24
 
27
- #
28
25
  # This class provides an Appender that can write to STDERR.
29
26
  #
30
- class Stderr< ::Logging::Appenders::IO
27
+ class Stderr < ::Logging::Appenders::IO
31
28
 
32
- #
33
29
  # call-seq:
34
30
  # Stderr.new
35
31
  # Stderr.new( :layout => layout )
@@ -1,15 +1,13 @@
1
- # $Id: file.rb 27 2007-02-01 16:58:11Z tim_pease $
1
+ # $Id: file.rb 46 2007-10-31 14:39:01Z tim_pease $
2
2
 
3
3
  require 'logging/appenders/io'
4
4
 
5
5
  module Logging::Appenders
6
6
 
7
- #
8
7
  # This class provides an Appender that can write to a File.
9
8
  #
10
9
  class File < ::Logging::Appenders::IO
11
10
 
12
- #
13
11
  # call-seq:
14
12
  # File.new( name, :filename => 'file' )
15
13
  # File.new( name, :filename => 'file', :truncate => true )
@@ -22,7 +20,7 @@ module Logging::Appenders
22
20
  # appened to the file.
23
21
  #
24
22
  def initialize( name, opts = {} )
25
- @fn = opts.delete(:filename) || opts.delete('filename')
23
+ @fn = opts.delete(:filename) || opts.delete('filename') || name
26
24
  raise ArgumentError, 'no filename was given' if @fn.nil?
27
25
 
28
26
  mode = opts.delete(:truncate) || opts.delete('truncate')