logging 0.7.1 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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