logging 0.7.1 → 0.8.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.
Files changed (55) hide show
  1. data/History.txt +9 -1
  2. data/Manifest.txt +3 -4
  3. data/Rakefile +8 -7
  4. data/lib/logging.rb +2 -2
  5. data/lib/logging/appender.rb +1 -1
  6. data/lib/logging/appenders/console.rb +1 -1
  7. data/lib/logging/appenders/email.rb +3 -2
  8. data/lib/logging/appenders/file.rb +1 -1
  9. data/lib/logging/appenders/growl.rb +1 -1
  10. data/lib/logging/appenders/io.rb +1 -1
  11. data/lib/logging/appenders/rolling_file.rb +3 -3
  12. data/lib/logging/appenders/syslog.rb +1 -1
  13. data/lib/logging/config/yaml_configurator.rb +1 -1
  14. data/lib/logging/layout.rb +1 -1
  15. data/lib/logging/layouts/basic.rb +1 -1
  16. data/lib/logging/layouts/pattern.rb +1 -1
  17. data/lib/logging/log_event.rb +1 -1
  18. data/lib/logging/logger.rb +59 -17
  19. data/lib/logging/repository.rb +15 -1
  20. data/lib/logging/root_logger.rb +6 -4
  21. data/lib/logging/utils.rb +1 -1
  22. data/tasks/ann.rake +20 -15
  23. data/tasks/bones.rake +7 -26
  24. data/tasks/gem.rake +49 -36
  25. data/tasks/git.rake +41 -0
  26. data/tasks/notes.rake +28 -0
  27. data/tasks/post_load.rake +19 -10
  28. data/tasks/{doc.rake → rdoc.rake} +10 -7
  29. data/tasks/rubyforge.rake +12 -11
  30. data/tasks/setup.rb +122 -81
  31. data/tasks/test.rake +6 -6
  32. data/test/appenders/test_console.rb +1 -1
  33. data/test/appenders/test_email.rb +4 -2
  34. data/test/appenders/test_file.rb +1 -1
  35. data/test/appenders/test_growl.rb +1 -1
  36. data/test/appenders/test_io.rb +1 -1
  37. data/test/appenders/test_rolling_file.rb +1 -1
  38. data/test/appenders/test_syslog.rb +1 -1
  39. data/test/benchmark.rb +1 -1
  40. data/test/config/test_yaml_configurator.rb +1 -1
  41. data/test/layouts/test_basic.rb +1 -1
  42. data/test/layouts/test_pattern.rb +1 -1
  43. data/test/setup.rb +3 -8
  44. data/test/test_appender.rb +1 -1
  45. data/test/test_layout.rb +1 -1
  46. data/test/test_log_event.rb +1 -1
  47. data/test/test_logger.rb +88 -11
  48. data/test/test_logging.rb +1 -1
  49. data/test/test_repository.rb +5 -1
  50. data/test/test_root_logger.rb +1 -1
  51. data/test/test_utils.rb +1 -1
  52. metadata +15 -7
  53. data/lib/logging/stelan/lockfile.rb +0 -530
  54. data/tasks/annotations.rake +0 -22
  55. data/tasks/svn.rake +0 -44
@@ -1,4 +1,12 @@
1
- == 0.7.1 / 2008-
1
+ == 0.8.0 / 2008-07-02
2
+
3
+ 1 minor enhancement
4
+ - Setting the log level of a parent will cause this level to
5
+ be propagated to the children
6
+ 1 bug fix
7
+ - Fixed error with the e-mail appender and missing hostname
8
+
9
+ == 0.7.1 / 2008-02-25
2
10
 
3
11
  1 minor enhancement
4
12
  - Removed dependency on the Lockfile gem (brought the ruby
@@ -20,18 +20,17 @@ lib/logging/log_event.rb
20
20
  lib/logging/logger.rb
21
21
  lib/logging/repository.rb
22
22
  lib/logging/root_logger.rb
23
- lib/logging/stelan/lockfile.rb
24
23
  lib/logging/utils.rb
25
24
  tasks/ann.rake
26
- tasks/annotations.rake
27
25
  tasks/bones.rake
28
- tasks/doc.rake
29
26
  tasks/gem.rake
27
+ tasks/git.rake
30
28
  tasks/manifest.rake
29
+ tasks/notes.rake
31
30
  tasks/post_load.rake
31
+ tasks/rdoc.rake
32
32
  tasks/rubyforge.rake
33
33
  tasks/setup.rb
34
- tasks/svn.rake
35
34
  tasks/test.rake
36
35
  test/appenders/test_console.rb
37
36
  test/appenders/test_email.rb
data/Rakefile CHANGED
@@ -12,16 +12,17 @@ PROJ.summary = 'A flexible and extendable logging library for Ruby'
12
12
  PROJ.authors = 'Tim Pease'
13
13
  PROJ.email = 'tim.pease@gmail.com'
14
14
  PROJ.url = 'http://logging.rubyforge.org/'
15
- PROJ.rubyforge_name = 'logging'
16
- PROJ.rdoc_dir = 'doc/rdoc'
17
- #PROJ.rdoc_remote_dir = 'rdoc'
18
- PROJ.rdoc_remote_dir = ''
15
+ PROJ.rubyforge.name = 'logging'
16
+ PROJ.rdoc.dir = 'doc/rdoc'
17
+ #PROJ.rdoc.remote_dir = 'rdoc'
18
+ PROJ.rdoc.remote_dir = ''
19
19
  PROJ.version = Logging::VERSION
20
20
 
21
- PROJ.exclude += %w[^tags$ ^tasks/archive ^coverage]
22
- PROJ.rdoc_exclude << '^data'
23
- PROJ.svn = true
21
+ PROJ.exclude << %w[^tags$ ^tasks/archive ^coverage]
22
+ PROJ.rdoc.exclude << '^data'
23
+ PROJ.svn.path = ''
24
24
 
25
25
  depend_on 'flexmock'
26
+ depend_on 'lockfile'
26
27
 
27
28
  # EOF
@@ -1,4 +1,4 @@
1
- # $Id: logging.rb 105 2008-02-26 04:43:21Z tim_pease $
1
+ # $Id$
2
2
 
3
3
  # Equivalent to a header guard in C/C++
4
4
  # Used to prevent the class/module from being loaded more than once
@@ -12,7 +12,7 @@ unless defined? Logging
12
12
  module Logging
13
13
 
14
14
  # :stopdoc:
15
- VERSION = '0.7.1'
15
+ VERSION = '0.8.0'
16
16
  LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
17
17
  PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
18
18
  WIN32 = %r/djgpp|(cyg|ms|bcc)win|mingw/ =~ RUBY_PLATFORM
@@ -1,4 +1,4 @@
1
- # $Id: appender.rb 88 2008-02-08 18:47:36Z tim_pease $
1
+ # $Id$
2
2
 
3
3
  require 'thread'
4
4
 
@@ -1,4 +1,4 @@
1
- # $Id: console.rb 88 2008-02-08 18:47:36Z tim_pease $
1
+ # $Id$
2
2
 
3
3
  require Logging.libpath(*%w[logging appenders io])
4
4
 
@@ -1,4 +1,4 @@
1
- # $Id: email.rb 96 2008-02-10 18:18:10Z tim_pease $
1
+ # $Id$
2
2
 
3
3
  require 'net/smtp'
4
4
  require 'time' # get rfc822 time format
@@ -38,7 +38,7 @@ class Email < ::Logging::Appender
38
38
 
39
39
  @server = opts.getopt :server, 'localhost'
40
40
  @port = opts.getopt :port, 25, :as => Integer
41
- @domain = opts.getopt :domain, ENV['HOSTNAME']
41
+ @domain = opts.getopt(:domain, ENV['HOSTNAME']) || 'localhost.localdomain'
42
42
  @acct = opts.getopt :acct
43
43
  @passwd = opts.getopt :passwd
44
44
  @authtype = opts.getopt :authtype, :cram_md5, :as => Symbol
@@ -118,6 +118,7 @@ class Email < ::Logging::Appender
118
118
  Net::SMTP.start(*@params) {|smtp| smtp.sendmail(rfc822msg, @from, @to)}
119
119
  rescue Exception => e
120
120
  self.level = :off
121
+ STDERR.puts e.message
121
122
  # TODO - log that e-mail notification has been turned off
122
123
  ensure
123
124
  @buff.clear
@@ -1,4 +1,4 @@
1
- # $Id: file.rb 77 2007-12-30 02:21:33Z tim_pease $
1
+ # $Id$
2
2
 
3
3
  module Logging::Appenders
4
4
 
@@ -1,4 +1,4 @@
1
- # $Id: growl.rb 96 2008-02-10 18:18:10Z tim_pease $
1
+ # $Id$
2
2
 
3
3
  module Logging::Appenders
4
4
 
@@ -1,4 +1,4 @@
1
- # $Id: io.rb 96 2008-02-10 18:18:10Z tim_pease $
1
+ # $Id$
2
2
 
3
3
  module Logging::Appenders
4
4
 
@@ -1,6 +1,6 @@
1
- # $Id: rolling_file.rb 106 2008-02-26 04:52:42Z tim_pease $
1
+ # $Id$
2
2
 
3
- require Logging.libpath(*%w[logging stelan lockfile])
3
+ require 'lockfile'
4
4
 
5
5
  module Logging::Appenders
6
6
 
@@ -75,7 +75,7 @@ module Logging::Appenders
75
75
  @size = opts.getopt(:size, :as => Integer)
76
76
 
77
77
  @lockfile = if opts.getopt(:safe, false) and !::Logging::WIN32
78
- ::Logging::Lockfile.new(
78
+ ::Lockfile.new(
79
79
  @fn + '.lck',
80
80
  :retries => 1,
81
81
  :timeout => 2
@@ -1,4 +1,4 @@
1
- # $Id: syslog.rb 96 2008-02-10 18:18:10Z tim_pease $
1
+ # $Id$
2
2
 
3
3
  begin
4
4
  require 'syslog'
@@ -1,4 +1,4 @@
1
- # $Id: yaml_configurator.rb 97 2008-02-13 00:32:18Z tim_pease $
1
+ # $Id$
2
2
 
3
3
  require 'yaml'
4
4
 
@@ -1,4 +1,4 @@
1
- # $Id: layout.rb 88 2008-02-08 18:47:36Z tim_pease $
1
+ # $Id$
2
2
 
3
3
  require 'yaml'
4
4
 
@@ -1,4 +1,4 @@
1
- # $Id: basic.rb 77 2007-12-30 02:21:33Z tim_pease $
1
+ # $Id$
2
2
 
3
3
  module Logging
4
4
  module Layouts
@@ -1,4 +1,4 @@
1
- # $Id: pattern.rb 77 2007-12-30 02:21:33Z tim_pease $
1
+ # $Id$
2
2
 
3
3
  module Logging
4
4
  module Layouts
@@ -1,4 +1,4 @@
1
- # $Id: log_event.rb 53 2007-11-28 00:21:33Z tim_pease $
1
+ # $Id$
2
2
 
3
3
  module Logging
4
4
 
@@ -1,4 +1,4 @@
1
- # $Id: logger.rb 97 2008-02-13 00:32:18Z tim_pease $
1
+ # $Id$
2
2
 
3
3
  require 'thread'
4
4
 
@@ -112,7 +112,7 @@ module Logging
112
112
 
113
113
  end # class << self
114
114
 
115
- attr_reader :level, :name, :parent, :additive, :trace
115
+ attr_reader :name, :parent, :additive, :trace
116
116
 
117
117
  # call-seq:
118
118
  # Logger.new( name )
@@ -148,7 +148,8 @@ module Logging
148
148
  @appenders = []
149
149
  @additive = true
150
150
  @trace = false
151
- self.level = @parent.level
151
+ @level = nil
152
+ ::Logging::Logger.define_log_methods(self)
152
153
 
153
154
  repo.children(name).each {|c| c.parent = self}
154
155
  end
@@ -242,6 +243,16 @@ module Logging
242
243
  else raise ArgumentError, 'expecting a boolean' end
243
244
  end
244
245
 
246
+ # call-seq:
247
+ # level => integer
248
+ #
249
+ # Returns an integer which is the defined log level for this logger.
250
+ #
251
+ def level
252
+ return @level unless @level.nil?
253
+ @parent.level
254
+ end
255
+
245
256
  # call-seq:
246
257
  # level = :all
247
258
  #
@@ -271,21 +282,24 @@ module Logging
271
282
  # log.level = 1_000_000_000_000
272
283
  #
273
284
  def level=( level )
274
- lvl = case level
275
- when String, Symbol; ::Logging::level_num(level)
276
- when Fixnum; level
277
- when nil; @parent.level
278
- else
279
- raise ArgumentError,
280
- "level must be a String, Symbol, or Integer"
281
- end
282
- if lvl.nil? or lvl < 0 or lvl > ::Logging::LEVELS.length
283
- raise ArgumentError, "unknown level was given '#{level}'"
284
- end
285
+ @level =
286
+ if level.nil? then level
287
+ else
288
+ lvl = case level
289
+ when String, Symbol; ::Logging::level_num(level)
290
+ when Fixnum; level
291
+ else
292
+ raise ArgumentError,
293
+ "level must be a String, Symbol, or Integer"
294
+ end
295
+ if lvl.nil? or lvl < 0 or lvl > ::Logging::LEVELS.length
296
+ raise ArgumentError, "unknown level was given '#{level}'"
297
+ end
298
+ lvl
299
+ end
285
300
 
286
- @level = lvl
287
- ::Logging::Logger.define_log_methods(self)
288
- @level
301
+ define_log_methods(true)
302
+ self.level
289
303
  end
290
304
 
291
305
  # call-seq:
@@ -343,6 +357,15 @@ module Logging
343
357
  #
344
358
  def clear_appenders( ) @appenders.clear end
345
359
 
360
+ # call-seq:
361
+ # inspect => string
362
+ #
363
+ # Returns a string representation of the logger.
364
+ #
365
+ def inspect
366
+ "<%s:0x%x name=\"%s\">" % [self.class.name, self.object_id, self.name]
367
+ end
368
+
346
369
 
347
370
  protected
348
371
 
@@ -367,6 +390,25 @@ module Logging
367
390
  @parent.log_event(event) if @additive
368
391
  end
369
392
 
393
+ # call-seq:
394
+ # define_log_methods( force = false )
395
+ #
396
+ # Define the logging methods for this logger based on the configured log
397
+ # level. If the level is nil, then we will ask our parent for it's level
398
+ # and define log levels accordingly. The force flag will skip this
399
+ # check.
400
+ #
401
+ # Recursively call this method on all our children loggers.
402
+ #
403
+ def define_log_methods( force = false )
404
+ return if @level and !force
405
+
406
+ ::Logging::Logger.define_log_methods(self)
407
+ ::Logging::Repository.instance.children(name).each do |c|
408
+ c.define_log_methods
409
+ end
410
+ end
411
+
370
412
  # :stopdoc:
371
413
 
372
414
  # call-seq:
@@ -1,4 +1,4 @@
1
- # $Id: repository.rb 77 2007-12-30 02:21:33Z tim_pease $
1
+ # $Id$
2
2
 
3
3
  require 'singleton'
4
4
 
@@ -93,6 +93,8 @@ module Logging
93
93
  # existence of the logger referenced by _key_.
94
94
  #
95
95
  def parent( key )
96
+ return if 'root' == key.to_s
97
+
96
98
  key = to_key(key)
97
99
  a = key.split PATH_DELIMITER
98
100
 
@@ -113,6 +115,18 @@ module Logging
113
115
  # existence of the logger referenced by _key_.
114
116
  #
115
117
  def children( key )
118
+ # need to handle the root logger as a special case
119
+ if 'root' == key.to_s
120
+ ary = []
121
+ @h.each_pair do |key,logger|
122
+ key = key.to_s
123
+ next if key == 'root'
124
+ next if key.index(PATH_DELIMITER)
125
+ ary << logger
126
+ end
127
+ return ary.sort
128
+ end
129
+
116
130
  key = to_key(key)
117
131
  depth = key.split(PATH_DELIMITER).length
118
132
  rgxp = Regexp.new "^#{key}#{PATH_DELIMITER}"
@@ -1,4 +1,4 @@
1
- # $Id: root_logger.rb 97 2008-02-13 00:32:18Z tim_pease $
1
+ # $Id$
2
2
 
3
3
  module Logging
4
4
 
@@ -13,6 +13,8 @@ module Logging
13
13
  undef_method m.intern
14
14
  end
15
15
 
16
+ attr_reader :level
17
+
16
18
  # call-seq:
17
19
  # RootLogger.new
18
20
  #
@@ -26,7 +28,8 @@ module Logging
26
28
  @appenders = []
27
29
  @additive = false
28
30
  @trace = false
29
- self.level = 0
31
+ @level = 0
32
+ ::Logging::Logger.define_log_methods(self)
30
33
  end
31
34
 
32
35
  # call-seq:
@@ -50,8 +53,7 @@ module Logging
50
53
  # root logger is not allowed. The level is silently set to :all.
51
54
  #
52
55
  def level=( level )
53
- level ||= 0
54
- super
56
+ super(level || 0)
55
57
  end
56
58
 
57
59
  end # class RootLogger
@@ -1,4 +1,4 @@
1
- # $Id: utils.rb 96 2008-02-10 18:18:10Z tim_pease $
1
+ # $Id$
2
2
 
3
3
  class Hash
4
4
 
@@ -1,4 +1,4 @@
1
- # $Id: ann.rake 105 2008-02-26 04:43:21Z tim_pease $
1
+ # $Id$
2
2
 
3
3
  begin
4
4
  require 'bones/smtp_tls'
@@ -9,12 +9,16 @@ require 'time'
9
9
 
10
10
  namespace :ann do
11
11
 
12
- file PROJ.ann_file do
13
- puts "Generating #{PROJ.ann_file}"
14
- File.open(PROJ.ann_file,'w') do |fd|
12
+ # A prerequisites task that all other tasks depend upon
13
+ task :prereqs
14
+
15
+ file PROJ.ann.file do
16
+ ann = PROJ.ann
17
+ puts "Generating #{ann.file}"
18
+ File.open(ann.file,'w') do |fd|
15
19
  fd.puts("#{PROJ.name} version #{PROJ.version}")
16
20
  fd.puts(" by #{Array(PROJ.authors).first}") if PROJ.authors
17
- fd.puts(" #{PROJ.url}") if PROJ.url
21
+ fd.puts(" #{PROJ.url}") if PROJ.url.valid?
18
22
  fd.puts(" (the \"#{PROJ.release_name}\" release)") if PROJ.release_name
19
23
  fd.puts
20
24
  fd.puts("== DESCRIPTION")
@@ -23,23 +27,24 @@ namespace :ann do
23
27
  fd.puts
24
28
  fd.puts(PROJ.changes.sub(%r/^.*$/, '== CHANGES'))
25
29
  fd.puts
26
- PROJ.ann_paragraphs.each do |p|
30
+ ann.paragraphs.each do |p|
27
31
  fd.puts "== #{p.upcase}"
28
32
  fd.puts
29
33
  fd.puts paragraphs_of(PROJ.readme_file, p).join("\n\n")
30
34
  fd.puts
31
35
  end
32
- fd.puts PROJ.ann_text if PROJ.ann_text
36
+ fd.puts ann.text if ann.text
33
37
  end
34
38
  end
35
39
 
36
40
  desc "Create an announcement file"
37
- task :announcement => PROJ.ann_file
41
+ task :announcement => ['ann:prereqs', PROJ.ann.file]
38
42
 
39
43
  desc "Send an email announcement"
40
- task :email => PROJ.ann_file do
41
- from = PROJ.ann_email[:from] || PROJ.email
42
- to = Array(PROJ.ann_email[:to])
44
+ task :email => ['ann:prereqs', PROJ.ann.file] do
45
+ ann = PROJ.ann
46
+ from = ann.email[:from] || PROJ.email
47
+ to = Array(ann.email[:to])
43
48
 
44
49
  ### build a mail header for RFC 822
45
50
  rfc822msg = "From: #{from}\n"
@@ -49,11 +54,11 @@ namespace :ann do
49
54
  rfc822msg << "\n"
50
55
  rfc822msg << "Date: #{Time.new.rfc822}\n"
51
56
  rfc822msg << "Message-Id: "
52
- rfc822msg << "<#{"%.8f" % Time.now.to_f}@#{PROJ.ann_email[:domain]}>\n\n"
53
- rfc822msg << File.read(PROJ.ann_file)
57
+ rfc822msg << "<#{"%.8f" % Time.now.to_f}@#{ann.email[:domain]}>\n\n"
58
+ rfc822msg << File.read(ann.file)
54
59
 
55
60
  params = [:server, :port, :domain, :acct, :passwd, :authtype].map do |key|
56
- PROJ.ann_email[key]
61
+ ann.email[key]
57
62
  end
58
63
 
59
64
  params[3] = PROJ.email if params[3].nil?
@@ -71,6 +76,6 @@ end # namespace :ann
71
76
  desc 'Alias to ann:announcement'
72
77
  task :ann => 'ann:announcement'
73
78
 
74
- CLOBBER << PROJ.ann_file
79
+ CLOBBER << PROJ.ann.file
75
80
 
76
81
  # EOF