logging 0.4.0 → 0.5.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.
@@ -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')