logging 0.9.6 → 0.9.7

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,10 @@
1
+ == 0.9.7 / 2009-03-17
2
+
3
+ 1 minor enhancement
4
+ - Added a StringIO appender
5
+ 1 bug fix
6
+ - Handling objects that cannot be dumped via YAML [Tim Galeckas]
7
+
1
8
  == 0.9.6 / 2009-02-02
2
9
 
3
10
  2 minor enhancements
data/lib/logging.rb CHANGED
@@ -8,16 +8,12 @@ begin require 'fastthread'; rescue LoadError; end
8
8
 
9
9
  # TODO: Windows Log Service appender
10
10
 
11
- # TODO: Option to buffer log messages at the appender level
12
- # extend the concept found in the e-mail appender into the other IO
13
- # appenders
14
-
15
11
  #
16
12
  #
17
13
  module Logging
18
14
 
19
15
  # :stopdoc:
20
- VERSION = '0.9.6'
16
+ VERSION = '0.9.7'
21
17
  LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
22
18
  PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
23
19
  WIN32 = %r/djgpp|(cyg|ms|bcc)win|mingw/ =~ RUBY_PLATFORM
@@ -0,0 +1,57 @@
1
+
2
+ require 'stringio'
3
+
4
+ module Logging::Appenders
5
+
6
+ # This class provides an Appender that can write to a StringIO instance.
7
+ # This is very useful for testing log message output.
8
+ #
9
+ class StringIo < ::Logging::Appenders::IO
10
+
11
+ # The StringIO instance the appender is writing to.
12
+ attr_reader :sio
13
+
14
+ # call-seq:
15
+ # StringIo.new( name, opts = {} )
16
+ #
17
+ # Creates a new StrinIo appender that will append log messages to a
18
+ # StringIO instance.
19
+ #
20
+ def initialize( name, opts = {} )
21
+ @sio = StringIO.new
22
+ super(name, @sio, opts)
23
+ clear
24
+ end
25
+
26
+ # Read a single line of text from the internal StringIO instance. +nil+
27
+ # is returned if the StringIO buffer is empty.
28
+ #
29
+ def readline
30
+ sync {
31
+ begin
32
+ @sio.seek @pos
33
+ line = @sio.readline
34
+ @pos = @sio.tell
35
+ line
36
+ rescue EOFError
37
+ nil
38
+ end
39
+ }
40
+ end
41
+
42
+ # Clears the internal StringIO instance. All log messages are removed
43
+ # from the buffer.
44
+ #
45
+ def clear
46
+ sync {
47
+ @pos = 0
48
+ @sio.seek 0
49
+ @sio.truncate 0
50
+ }
51
+ end
52
+ alias :reset :clear
53
+
54
+ end # class StringIo
55
+ end # module Logging::Appenders
56
+
57
+ # EOF
@@ -93,12 +93,24 @@ class Layout
93
93
  str = "<#{obj.class.name}> "
94
94
  str << case @obj_format
95
95
  when :inspect; obj.inspect
96
- when :yaml; "\n#{obj.to_yaml}"
96
+ when :yaml; try_yaml(obj)
97
97
  else obj.to_s end
98
98
  str
99
99
  end
100
100
  end
101
101
 
102
+ # call-seq:
103
+ # try_yaml( obj )
104
+ #
105
+ # Attempt to format the _obj_ using yaml, but fall back to inspect style
106
+ # formatting if yaml fails.
107
+ #
108
+ def try_yaml( obj )
109
+ "\n#{obj.to_yaml}"
110
+ rescue TypeError
111
+ obj.inspect
112
+ end
113
+
102
114
  end # class Layout
103
115
  end # module Logging
104
116
 
data/logging.gemspec CHANGED
@@ -2,15 +2,15 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{logging}
5
- s.version = "0.9.6"
5
+ s.version = "0.9.7"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Tim Pease"]
9
- s.date = %q{2009-02-01}
9
+ s.date = %q{2009-03-17}
10
10
  s.description = %q{Logging is a flexible logging library for use in Ruby programs based on the design of Java's log4j library. It features a hierarchical logging system, custom level names, multiple output destinations per log event, custom formatting, and more.}
11
11
  s.email = %q{tim.pease@gmail.com}
12
12
  s.extra_rdoc_files = ["History.txt", "README.rdoc"]
13
- s.files = ["History.txt", "README.rdoc", "Rakefile", "data/bad_logging_1.rb", "data/bad_logging_2.rb", "data/logging.rb", "data/logging.yaml", "data/simple_logging.rb", "lib/logging.rb", "lib/logging/appender.rb", "lib/logging/appenders/buffering.rb", "lib/logging/appenders/console.rb", "lib/logging/appenders/email.rb", "lib/logging/appenders/file.rb", "lib/logging/appenders/growl.rb", "lib/logging/appenders/io.rb", "lib/logging/appenders/rolling_file.rb", "lib/logging/appenders/syslog.rb", "lib/logging/config/configurator.rb", "lib/logging/config/yaml_configurator.rb", "lib/logging/layout.rb", "lib/logging/layouts/basic.rb", "lib/logging/layouts/pattern.rb", "lib/logging/log_event.rb", "lib/logging/logger.rb", "lib/logging/repository.rb", "lib/logging/root_logger.rb", "lib/logging/stats.rb", "lib/logging/utils.rb", "logging.gemspec", "test/appenders/test_buffered_io.rb", "test/appenders/test_console.rb", "test/appenders/test_email.rb", "test/appenders/test_file.rb", "test/appenders/test_growl.rb", "test/appenders/test_io.rb", "test/appenders/test_rolling_file.rb", "test/appenders/test_syslog.rb", "test/benchmark.rb", "test/config/test_configurator.rb", "test/config/test_yaml_configurator.rb", "test/layouts/test_basic.rb", "test/layouts/test_pattern.rb", "test/setup.rb", "test/test_appender.rb", "test/test_layout.rb", "test/test_log_event.rb", "test/test_logger.rb", "test/test_logging.rb", "test/test_repository.rb", "test/test_root_logger.rb", "test/test_stats.rb", "test/test_utils.rb"]
13
+ s.files = ["History.txt", "README.rdoc", "Rakefile", "data/bad_logging_1.rb", "data/bad_logging_2.rb", "data/logging.rb", "data/logging.yaml", "data/simple_logging.rb", "lib/logging.rb", "lib/logging/appender.rb", "lib/logging/appenders/buffering.rb", "lib/logging/appenders/console.rb", "lib/logging/appenders/email.rb", "lib/logging/appenders/file.rb", "lib/logging/appenders/growl.rb", "lib/logging/appenders/io.rb", "lib/logging/appenders/rolling_file.rb", "lib/logging/appenders/string_io.rb", "lib/logging/appenders/syslog.rb", "lib/logging/config/configurator.rb", "lib/logging/config/yaml_configurator.rb", "lib/logging/layout.rb", "lib/logging/layouts/basic.rb", "lib/logging/layouts/pattern.rb", "lib/logging/log_event.rb", "lib/logging/logger.rb", "lib/logging/repository.rb", "lib/logging/root_logger.rb", "lib/logging/stats.rb", "lib/logging/utils.rb", "logging.gemspec", "test/appenders/test_buffered_io.rb", "test/appenders/test_console.rb", "test/appenders/test_email.rb", "test/appenders/test_file.rb", "test/appenders/test_growl.rb", "test/appenders/test_io.rb", "test/appenders/test_rolling_file.rb", "test/appenders/test_syslog.rb", "test/benchmark.rb", "test/config/test_configurator.rb", "test/config/test_yaml_configurator.rb", "test/layouts/test_basic.rb", "test/layouts/test_pattern.rb", "test/setup.rb", "test/test_appender.rb", "test/test_layout.rb", "test/test_log_event.rb", "test/test_logger.rb", "test/test_logging.rb", "test/test_repository.rb", "test/test_root_logger.rb", "test/test_stats.rb", "test/test_utils.rb"]
14
14
  s.has_rdoc = true
15
15
  s.homepage = %q{http://logging.rubyforge.org/}
16
16
  s.rdoc_options = ["--main", "README.rdoc"]
@@ -25,17 +25,17 @@ Gem::Specification.new do |s|
25
25
  s.specification_version = 2
26
26
 
27
27
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
28
- s.add_runtime_dependency(%q<flexmock>, [">= 0.8.3"])
28
+ s.add_runtime_dependency(%q<flexmock>, [">= 0.8.2"])
29
29
  s.add_runtime_dependency(%q<lockfile>, [">= 1.4.3"])
30
- s.add_development_dependency(%q<bones>, [">= 2.3.1"])
30
+ s.add_development_dependency(%q<bones>, [">= 2.4.2"])
31
31
  else
32
- s.add_dependency(%q<flexmock>, [">= 0.8.3"])
32
+ s.add_dependency(%q<flexmock>, [">= 0.8.2"])
33
33
  s.add_dependency(%q<lockfile>, [">= 1.4.3"])
34
- s.add_dependency(%q<bones>, [">= 2.3.1"])
34
+ s.add_dependency(%q<bones>, [">= 2.4.2"])
35
35
  end
36
36
  else
37
- s.add_dependency(%q<flexmock>, [">= 0.8.3"])
37
+ s.add_dependency(%q<flexmock>, [">= 0.8.2"])
38
38
  s.add_dependency(%q<lockfile>, [">= 1.4.3"])
39
- s.add_dependency(%q<bones>, [">= 2.3.1"])
39
+ s.add_dependency(%q<bones>, [">= 2.4.2"])
40
40
  end
41
41
  end
data/tasks/rdoc.rake CHANGED
@@ -19,10 +19,11 @@ namespace :doc do
19
19
  end
20
20
  rd.rdoc_files.push(*files)
21
21
 
22
- title = "#{PROJ.name}-#{PROJ.version} Documentation"
23
-
22
+ name = PROJ.name
24
23
  rf_name = PROJ.rubyforge.name
25
- title = "#{rf_name}'s " + title if rf_name.valid? and rf_name != title
24
+
25
+ title = "#{name}-#{PROJ.version} Documentation"
26
+ title = "#{rf_name}'s " + title if rf_name.valid? and rf_name != name
26
27
 
27
28
  rd.options << "-t #{title}"
28
29
  rd.options.concat(rdoc.opts)
data/tasks/setup.rb CHANGED
@@ -6,7 +6,7 @@ require 'fileutils'
6
6
  require 'ostruct'
7
7
  require 'find'
8
8
 
9
- class OpenStruct; undef :gem; end
9
+ class OpenStruct; undef :gem if defined? :gem; end
10
10
 
11
11
  # TODO: make my own openstruct type object that includes descriptions
12
12
  # TODO: use the descriptions to output help on the available bones options
@@ -124,9 +124,7 @@ import(*rakefiles)
124
124
  %w(lib ext).each {|dir| PROJ.libs << dir if test ?d, dir}
125
125
 
126
126
  # Setup some constants
127
- WIN32 = %r/djgpp|(cyg|ms|bcc)win|mingw/ =~ RUBY_PLATFORM unless defined? WIN32
128
-
129
- DEV_NULL = WIN32 ? 'NUL:' : '/dev/null'
127
+ DEV_NULL = File.exist?('/dev/null') ? '/dev/null' : 'NUL:'
130
128
 
131
129
  def quiet( &block )
132
130
  io = [STDOUT.dup, STDERR.dup]
@@ -139,21 +137,15 @@ ensure
139
137
  $stdout, $stderr = STDOUT, STDERR
140
138
  end
141
139
 
142
- DIFF = if WIN32 then 'diff.exe'
143
- else
144
- if quiet {system "gdiff", __FILE__, __FILE__} then 'gdiff'
145
- else 'diff' end
146
- end unless defined? DIFF
147
-
148
- SUDO = if WIN32 then ''
149
- else
150
- if quiet {system 'which sudo'} then 'sudo'
151
- else '' end
152
- end
153
-
154
- RCOV = WIN32 ? 'rcov.bat' : 'rcov'
155
- RDOC = WIN32 ? 'rdoc.bat' : 'rdoc'
156
- GEM = WIN32 ? 'gem.bat' : 'gem'
140
+ DIFF = if system("gdiff '#{__FILE__}' '#{__FILE__}' > #{DEV_NULL} 2>&1") then 'gdiff'
141
+ else 'diff' end unless defined? DIFF
142
+
143
+ SUDO = if system("which sudo > #{DEV_NULL} 2>&1") then 'sudo'
144
+ else '' end unless defined? SUDO
145
+
146
+ RCOV = "#{RUBY} -S rcov"
147
+ RDOC = "#{RUBY} -S rdoc"
148
+ GEM = "#{RUBY} -S gem"
157
149
 
158
150
  %w(rcov spec/rake/spectask rubyforge bones facets/ansicode).each do |lib|
159
151
  begin
@@ -12,11 +12,10 @@ module TestAppenders
12
12
  ::Logging.init
13
13
  @levels = ::Logging::LEVELS
14
14
 
15
- @sio = StringIO.new
16
- @appender = ::Logging::Appenders::IO.new(
17
- 'test_appender', @sio,
18
- :auto_flushing => 3, :immediate_at => :error
15
+ @appender = ::Logging::Appenders::StringIo.new(
16
+ 'test_appender', :auto_flushing => 3, :immediate_at => :error
19
17
  )
18
+ @sio = @appender.sio
20
19
 
21
20
  begin readline rescue EOFError end
22
21
  end
@@ -25,10 +24,10 @@ module TestAppenders
25
24
  event = ::Logging::LogEvent.new('TestLogger', @levels['warn'],
26
25
  [1, 2, 3, 4], false)
27
26
  @appender.append event
28
- assert_raise(EOFError) {readline}
27
+ assert_nil(readline)
29
28
 
30
29
  @appender.append event
31
- assert_raise(EOFError) {readline}
30
+ assert_nil(readline)
32
31
 
33
32
  event.level = @levels['debug']
34
33
  event.data = 'the big log message'
@@ -37,7 +36,7 @@ module TestAppenders
37
36
  assert_equal " WARN TestLogger : <Array> #{[1, 2, 3, 4]}\n", readline
38
37
  assert_equal " WARN TestLogger : <Array> #{[1, 2, 3, 4]}\n", readline
39
38
  assert_equal "DEBUG TestLogger : the big log message\n", readline
40
- assert_raise(EOFError) {readline}
39
+ assert_nil(readline)
41
40
 
42
41
  @appender.close
43
42
  assert_raise(RuntimeError) {@appender.append event}
@@ -46,10 +45,8 @@ module TestAppenders
46
45
  def test_append_error
47
46
  # setup an internal logger to capture error messages from the IO
48
47
  # appender
49
- log = StringIO.new
50
- Logging::Logger[Logging].add_appenders(
51
- Logging::Appenders::IO.new('__internal_io', log)
52
- )
48
+ log = Logging::Appenders::StringIo.new('__internal_io')
49
+ Logging::Logger[Logging].add_appenders(log)
53
50
  Logging::Logger[Logging].level = 'all'
54
51
 
55
52
 
@@ -58,15 +55,12 @@ module TestAppenders
58
55
  event = ::Logging::LogEvent.new('TestLogger', @levels['warn'],
59
56
  [1, 2, 3, 4], false)
60
57
  @appender.append event
61
- log.seek 0
62
- assert_raise(EOFError) {log.readline}
58
+ assert_nil(log.readline)
63
59
 
64
60
  @appender.append event
65
- log.seek 0
66
- assert_raise(EOFError) {log.readline}
61
+ assert_nil(log.readline)
67
62
 
68
63
  @appender.append event
69
- log.seek 0
70
64
  assert_equal "INFO Logging : appender \"test_appender\" has been disabled", log.readline.strip
71
65
  assert_equal "ERROR Logging : <IOError> not opened for writing", log.readline.strip
72
66
 
@@ -92,17 +86,17 @@ module TestAppenders
92
86
 
93
87
  def test_concat
94
88
  @appender << "this is a test message\n"
95
- assert_raise(EOFError) {readline}
89
+ assert_nil(readline)
96
90
 
97
91
  @appender << "this is another message\n"
98
- assert_raise(EOFError) {readline}
92
+ assert_nil(readline)
99
93
 
100
94
  @appender << "some other line\n"
101
95
 
102
96
  assert_equal "this is a test message\n", readline
103
97
  assert_equal "this is another message\n", readline
104
98
  assert_equal "some other line\n", readline
105
- assert_raise(EOFError) {readline}
99
+ assert_nil(readline)
106
100
 
107
101
  @appender.close
108
102
  assert_raise(RuntimeError) {@appender << 'message'}
@@ -111,24 +105,19 @@ module TestAppenders
111
105
  def test_concat_error
112
106
  # setup an internal logger to capture error messages from the IO
113
107
  # appender
114
- log = StringIO.new
115
- Logging::Logger[Logging].add_appenders(
116
- Logging::Appenders::IO.new('__internal_io', log)
117
- )
108
+ log = Logging::Appenders::StringIo.new('__internal_io')
109
+ Logging::Logger[Logging].add_appenders(log)
118
110
  Logging::Logger[Logging].level = 'all'
119
111
 
120
112
  # close the string IO object so we get an error
121
113
  @sio.close
122
114
  @appender << 'oopsy'
123
- log.seek 0
124
- assert_raise(EOFError) {log.readline}
115
+ assert_nil(log.readline)
125
116
 
126
117
  @appender << 'whoopsy'
127
- log.seek 0
128
- assert_raise(EOFError) {log.readline}
118
+ assert_nil(log.readline)
129
119
 
130
120
  @appender << 'pooh'
131
- log.seek 0
132
121
  assert_equal "INFO Logging : appender \"test_appender\" has been disabled", log.readline.strip
133
122
  assert_equal "ERROR Logging : <IOError> not opened for writing", log.readline.strip
134
123
 
@@ -143,19 +132,19 @@ module TestAppenders
143
132
  def @sio.flush() @ary << :flush end
144
133
 
145
134
  @appender << "this is a test message\n"
146
- assert_raise(EOFError) {readline}
135
+ assert_nil(readline)
147
136
 
148
137
  @appender.flush
149
138
  assert_equal :flush, ary.pop
150
139
  assert_equal "this is a test message\n", readline
151
- assert_raise(EOFError) {readline}
140
+ assert_nil(readline)
152
141
  end
153
142
 
154
143
  def test_immediate_at
155
144
  event = ::Logging::LogEvent.new('TestLogger', @levels['warn'],
156
145
  [1, 2, 3, 4], false)
157
146
  @appender.append event
158
- assert_raise(EOFError) {readline}
147
+ assert_nil(readline)
159
148
 
160
149
  event.level = @levels['error']
161
150
  event.data = 'an error message'
@@ -163,16 +152,12 @@ module TestAppenders
163
152
 
164
153
  assert_equal " WARN TestLogger : <Array> #{[1, 2, 3, 4]}\n", readline
165
154
  assert_equal "ERROR TestLogger : an error message\n", readline
166
- assert_raise(EOFError) {readline}
155
+ assert_nil(readline)
167
156
  end
168
157
 
169
158
  private
170
159
  def readline
171
- @pos ||= 0
172
- @sio.seek @pos
173
- line = @sio.readline
174
- @pos = @sio.tell
175
- line
160
+ @appender.readline
176
161
  end
177
162
 
178
163
  end # class TestBufferedIO
@@ -12,9 +12,8 @@ module TestAppenders
12
12
  ::Logging.init
13
13
  @levels = ::Logging::LEVELS
14
14
 
15
- @sio = StringIO.new
16
- @appender = ::Logging::Appenders::IO.new 'test_appender', @sio
17
- begin readline rescue EOFError end
15
+ @appender = ::Logging::Appenders::StringIo.new 'test_appender'
16
+ @sio = @appender.sio
18
17
  end
19
18
 
20
19
  def test_append
@@ -22,13 +21,13 @@ module TestAppenders
22
21
  [1, 2, 3, 4], false)
23
22
  @appender.append event
24
23
  assert_equal " WARN TestLogger : <Array> #{[1, 2, 3, 4]}\n", readline
25
- assert_raise(EOFError) {readline}
24
+ assert_nil(readline)
26
25
 
27
26
  event.level = @levels['debug']
28
27
  event.data = 'the big log message'
29
28
  @appender.append event
30
29
  assert_equal "DEBUG TestLogger : the big log message\n", readline
31
- assert_raise(EOFError) {readline}
30
+ assert_nil(readline)
32
31
 
33
32
  @appender.close
34
33
  assert_raise(RuntimeError) {@appender.append event}
@@ -37,20 +36,16 @@ module TestAppenders
37
36
  def test_append_error
38
37
  # setup an internal logger to capture error messages from the IO
39
38
  # appender
40
- log = StringIO.new
41
- Logging::Logger[Logging].add_appenders(
42
- Logging::Appenders::IO.new('__internal_io', log)
43
- )
39
+ log = Logging::Appenders::StringIo.new('__internal_io')
40
+ Logging::Logger[Logging].add_appenders(log)
44
41
  Logging::Logger[Logging].level = 'all'
45
42
 
46
-
47
43
  # close the string IO object so we get an error
48
44
  @sio.close
49
45
  event = ::Logging::LogEvent.new('TestLogger', @levels['warn'],
50
46
  [1, 2, 3, 4], false)
51
47
  @appender.append event
52
48
 
53
- log.seek 0
54
49
  assert_equal "INFO Logging : appender \"test_appender\" has been disabled", log.readline.strip
55
50
  assert_equal "ERROR Logging : <IOError> not opened for writing", log.readline.strip
56
51
 
@@ -77,13 +72,13 @@ module TestAppenders
77
72
  def test_concat
78
73
  @appender << "this is a test message\n"
79
74
  assert_equal "this is a test message\n", readline
80
- assert_raise(EOFError) {readline}
75
+ assert_nil(readline)
81
76
 
82
77
  @appender << "this is another message\n"
83
78
  @appender << "some other line\n"
84
79
  assert_equal "this is another message\n", readline
85
80
  assert_equal "some other line\n", readline
86
- assert_raise(EOFError) {readline}
81
+ assert_nil(readline)
87
82
 
88
83
  @appender.close
89
84
  assert_raise(RuntimeError) {@appender << 'message'}
@@ -92,17 +87,14 @@ module TestAppenders
92
87
  def test_concat_error
93
88
  # setup an internal logger to capture error messages from the IO
94
89
  # appender
95
- log = StringIO.new
96
- Logging::Logger[Logging].add_appenders(
97
- Logging::Appenders::IO.new('__internal_io', log)
98
- )
90
+ log = Logging::Appenders::StringIo.new('__internal_io')
91
+ Logging::Logger[Logging].add_appenders(log)
99
92
  Logging::Logger[Logging].level = 'all'
100
93
 
101
94
  # close the string IO object so we get an error
102
95
  @sio.close
103
96
  @appender << 'oopsy'
104
97
 
105
- log.seek 0
106
98
  assert_equal "INFO Logging : appender \"test_appender\" has been disabled", log.readline.strip
107
99
  assert_equal "ERROR Logging : <IOError> not opened for writing", log.readline.strip
108
100
 
@@ -127,11 +119,7 @@ module TestAppenders
127
119
 
128
120
  private
129
121
  def readline
130
- @pos ||= 0
131
- @sio.seek @pos
132
- line = @sio.readline
133
- @pos = @sio.tell
134
- line
122
+ @appender.readline
135
123
  end
136
124
 
137
125
  end # class TestIO
data/test/benchmark.rb CHANGED
@@ -18,7 +18,6 @@ rescue LoadError
18
18
  end
19
19
 
20
20
  require 'benchmark'
21
- require 'stringio'
22
21
  require 'logger'
23
22
 
24
23
  module Logging
data/test/setup.rb CHANGED
@@ -7,7 +7,6 @@ LOGGING_TEST_SETUP = true
7
7
  require 'rubygems'
8
8
  require 'test/unit'
9
9
  require 'fileutils'
10
- require 'stringio'
11
10
  begin
12
11
  require 'turn'
13
12
  rescue LoadError; end
data/test/test_layout.rb CHANGED
@@ -76,6 +76,9 @@ module TestLogging
76
76
  @layout = ::Logging::Layout.new :format_as => :yaml
77
77
  r = @layout.format_obj obj
78
78
  assert_equal "<Array> \n--- \n- one\n- two\n- three\n- four\n", r
79
+
80
+ r = @layout.format_obj Class
81
+ assert_equal "<Class> Class", r
79
82
  end
80
83
 
81
84
  def test_format_obj_without_backtrace
data/test/test_logger.rb CHANGED
@@ -20,8 +20,8 @@ module TestLogging
20
20
  root = ::Logging::Logger[:root]
21
21
  root.level = 'info'
22
22
 
23
- a1 = SioAppender.new 'a1'
24
- a2 = SioAppender.new 'a2'
23
+ a1 = ::Logging::Appenders::StringIo.new 'a1'
24
+ a2 = ::Logging::Appenders::StringIo.new 'a2'
25
25
  log = ::Logging::Logger.new 'A Logger'
26
26
 
27
27
  root.add_appenders a1
@@ -214,8 +214,8 @@ module TestLogging
214
214
  end
215
215
 
216
216
  def test_concat
217
- a1 = SioAppender.new 'a1'
218
- a2 = SioAppender.new 'a2'
217
+ a1 = ::Logging::Appenders::StringIo.new 'a1'
218
+ a2 = ::Logging::Appenders::StringIo.new 'a2'
219
219
  log = ::Logging::Logger.new 'A'
220
220
 
221
221
  ::Logging::Logger[:root].add_appenders a1
@@ -414,8 +414,8 @@ module TestLogging
414
414
  root = ::Logging::Logger[:root]
415
415
  root.level = 'info'
416
416
 
417
- a1 = SioAppender.new 'a1'
418
- a2 = SioAppender.new 'a2'
417
+ a1 = ::Logging::Appenders::StringIo.new 'a1'
418
+ a2 = ::Logging::Appenders::StringIo.new 'a2'
419
419
  log = ::Logging::Logger.new 'A Logger'
420
420
 
421
421
  root.add_appenders a1
@@ -697,29 +697,6 @@ module TestLogging
697
697
  end
698
698
 
699
699
  end # class TestLogger
700
-
701
- class SioAppender < ::Logging::Appenders::IO
702
-
703
- def initialize( name, opts = {} )
704
- @sio = StringIO.new
705
- super(name, @sio, opts)
706
- begin readline rescue EOFError end
707
- end
708
-
709
- def readline
710
- @pos ||= 0
711
- @sio.seek @pos
712
- begin
713
- line = @sio.readline
714
- @pos = @sio.tell
715
- line
716
- rescue EOFError
717
- nil
718
- end
719
- end
720
-
721
- end # class SioAppender
722
-
723
700
  end # module TestLogging
724
701
 
725
702
  class StringIO
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logging
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.6
4
+ version: 0.9.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Pease
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-02-02 00:00:00 -07:00
12
+ date: 2009-03-17 00:00:00 -06:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -40,7 +40,7 @@ dependencies:
40
40
  requirements:
41
41
  - - ">="
42
42
  - !ruby/object:Gem::Version
43
- version: 2.4.0
43
+ version: 2.4.2
44
44
  version:
45
45
  description: Logging is a flexible logging library for use in Ruby programs based on the design of Java's log4j library. It features a hierarchical logging system, custom level names, multiple output destinations per log event, custom formatting, and more.
46
46
  email: tim.pease@gmail.com
@@ -69,6 +69,7 @@ files:
69
69
  - lib/logging/appenders/growl.rb
70
70
  - lib/logging/appenders/io.rb
71
71
  - lib/logging/appenders/rolling_file.rb
72
+ - lib/logging/appenders/string_io.rb
72
73
  - lib/logging/appenders/syslog.rb
73
74
  - lib/logging/config/configurator.rb
74
75
  - lib/logging/config/yaml_configurator.rb