logging 1.8.0 → 1.8.1
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +6 -0
- data/README.rdoc +2 -0
- data/examples/custom_log_levels.rb +53 -0
- data/examples/lazy.rb +45 -0
- data/examples/rspec_integration.rb +38 -0
- data/lib/logging/diagnostic_context.rb +4 -4
- data/lib/logging/log_event.rb +1 -1
- data/test/layouts/test_yaml.rb +1 -1
- data/version.txt +1 -1
- metadata +5 -2
data/History.txt
CHANGED
data/README.rdoc
CHANGED
@@ -79,10 +79,12 @@ There are many more examples in the "examples" folder of the logging
|
|
79
79
|
package. The recommended reading order is the following:
|
80
80
|
|
81
81
|
* {simple.rb}[https://github.com/TwP/logging/blob/master/examples/simple.rb]
|
82
|
+
* {rspec_integration.rb}[https://github.com/TwP/logging/blob/master/examples/rspec_integration.rb]
|
82
83
|
* {loggers.rb}[https://github.com/TwP/logging/blob/master/examples/loggers.rb]
|
83
84
|
* {classes.rb}[https://github.com/TwP/logging/blob/master/examples/classes.rb]
|
84
85
|
* {hierarchies.rb}[https://github.com/TwP/logging/blob/master/examples/hierarchies.rb]
|
85
86
|
* {names.rb}[https://github.com/TwP/logging/blob/master/examples/names.rb]
|
87
|
+
* {lazy.rb}[https://github.com/TwP/logging/blob/master/examples/lazy.rb]
|
86
88
|
* {appenders.rb}[https://github.com/TwP/logging/blob/master/examples/appenders.rb]
|
87
89
|
* {layouts.rb}[https://github.com/TwP/logging/blob/master/examples/layouts.rb]
|
88
90
|
* {formatting.rb}[https://github.com/TwP/logging/blob/master/examples/formatting.rb]
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# :stopdoc:
|
2
|
+
#
|
3
|
+
# It's useful to define custom log levels that denote success, or otherwise
|
4
|
+
# meaningful events that happen to not be negative (more than 50% of the
|
5
|
+
# levels are given to warn, error, fail - quite a pessimistic view of one's
|
6
|
+
# application's chances of success, no? ;-) )
|
7
|
+
#
|
8
|
+
# Here, we define two new levels, 'happy' and 'success' and make them soothing
|
9
|
+
# colours.
|
10
|
+
#
|
11
|
+
|
12
|
+
require 'logging'
|
13
|
+
|
14
|
+
# https://github.com/TwP/logging/blob/master/lib/logging.rb#L250-285
|
15
|
+
# The levels run from lowest level to highest level.
|
16
|
+
|
17
|
+
Logging.init :debug, :info, :happy, :warn, :success, :error, :fatal
|
18
|
+
|
19
|
+
Logging.color_scheme( 'soothing_ish',
|
20
|
+
:levels => {
|
21
|
+
:info => :cyan,
|
22
|
+
:happy => :green,
|
23
|
+
:warn => :yellow,
|
24
|
+
:success => [:blue],
|
25
|
+
:error => :red,
|
26
|
+
:fatal => [:white, :on_red]
|
27
|
+
},
|
28
|
+
:date => :cyan,
|
29
|
+
:logger => :cyan,
|
30
|
+
:message => :orange
|
31
|
+
)
|
32
|
+
|
33
|
+
Logging.appenders.stdout(
|
34
|
+
'stdout',
|
35
|
+
:layout => Logging.layouts.pattern(
|
36
|
+
:pattern => '[%d] %-7l %c: %m\n',
|
37
|
+
:color_scheme => 'soothing_ish'
|
38
|
+
)
|
39
|
+
)
|
40
|
+
|
41
|
+
log = Logging.logger['Soothing::Colors']
|
42
|
+
log.add_appenders 'stdout'
|
43
|
+
log.level = :debug
|
44
|
+
|
45
|
+
log.debug 'a very nice little debug message'
|
46
|
+
log.info 'things are operating nominally'
|
47
|
+
log.happy 'What a beautiful day'
|
48
|
+
log.warn 'this is your last warning'
|
49
|
+
log.success 'I am INWEENCIBLE!!'
|
50
|
+
log.error StandardError.new('something went horribly wrong')
|
51
|
+
log.fatal 'I Die!'
|
52
|
+
|
53
|
+
# :startdoc:
|
data/examples/lazy.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# :stopdoc:
|
2
|
+
#
|
3
|
+
# It happens sometimes that it is very expensive to construct a logging
|
4
|
+
# message; for example, if a large object structure has to be traversed
|
5
|
+
# during executing of an `object.to_s` method. It would be convenient to
|
6
|
+
# delay creation of the message until the log event actually takes place.
|
7
|
+
#
|
8
|
+
# For example, with a logger configured only to show WARN messages and higher,
|
9
|
+
# creating the log message for an INFO message would be wasteful. The INFO log
|
10
|
+
# event would never be generated in this case.
|
11
|
+
#
|
12
|
+
# Log message creation can be performed lazily by wrapping the expensive
|
13
|
+
# message generation code in a block and passing that to the logging method.
|
14
|
+
|
15
|
+
require 'logging'
|
16
|
+
|
17
|
+
Logging.logger.root.appenders = Logging.appenders.stdout
|
18
|
+
Logging.logger.root.level = :info
|
19
|
+
|
20
|
+
# We use this dummy method in order to see if the method gets called, but in practice,
|
21
|
+
# this method might do complicated string operations to construct a log message.
|
22
|
+
def expensive_method
|
23
|
+
puts "Called!"
|
24
|
+
"Expensive message"
|
25
|
+
end
|
26
|
+
|
27
|
+
log = Logging.logger['Lazy']
|
28
|
+
|
29
|
+
# If you log this message the usual way, expensive_method gets called before
|
30
|
+
# debug, hence the Logging framework has no chance to stop it from being executed
|
31
|
+
# immediately.
|
32
|
+
log.info("Normal")
|
33
|
+
log.debug(expensive_method)
|
34
|
+
|
35
|
+
# If we put the message into a block, then the block is not executed, if
|
36
|
+
# the message is not needed with the current log level.
|
37
|
+
log.info("Block unused")
|
38
|
+
log.debug { expensive_method }
|
39
|
+
|
40
|
+
# If the log message is needed with the current log level, then the block is of
|
41
|
+
# course executed and the log message appears as expected.
|
42
|
+
log.info("Block used")
|
43
|
+
log.warn { expensive_method }
|
44
|
+
|
45
|
+
# :startdoc:
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# :stopdoc:
|
2
|
+
#
|
3
|
+
# One useful feature of log messages in your code is that they provide a
|
4
|
+
# convenient instrumentation point for testing. Through log messages you can
|
5
|
+
# confirm that internal methods were called or that certain code paths were
|
6
|
+
# executed. This example demonstrates how to capture log output during testing
|
7
|
+
# for later analysis.
|
8
|
+
#
|
9
|
+
# The Logging framework provides an RSpec helper that will direct log output
|
10
|
+
# to a StringIO appender. Log lines can be read from this IO destination
|
11
|
+
# during tests.
|
12
|
+
#
|
13
|
+
|
14
|
+
require 'rspec'
|
15
|
+
require 'logging'
|
16
|
+
require 'rspec/logging_helper'
|
17
|
+
|
18
|
+
# Configure RSpec to capture log messages for each test. The output from the
|
19
|
+
# logs will be stored in the @log_output variable. It is a StringIO instance.
|
20
|
+
RSpec.configure do |config|
|
21
|
+
include RSpec::LoggingHelper
|
22
|
+
config.capture_log_messages
|
23
|
+
end
|
24
|
+
|
25
|
+
# Now within your specs you can check that various log events were generated.
|
26
|
+
describe 'SuperLogger' do
|
27
|
+
it 'should be able to read a log message' do
|
28
|
+
logger = Logging.logger['SuperLogger']
|
29
|
+
|
30
|
+
logger.debug 'foo bar'
|
31
|
+
logger.warn 'just a little warning'
|
32
|
+
|
33
|
+
@log_output.readline.should be == 'DEBUG SuperLogger: foo bar'
|
34
|
+
@log_output.readline.should be == 'WARN SuperLogger: just a little warning'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# :startdoc:
|
@@ -307,17 +307,17 @@ class Thread
|
|
307
307
|
# then they cannot be garbage collected until the child thread exits.
|
308
308
|
#
|
309
309
|
def create_with_logging_context( m, *a, &b )
|
310
|
-
|
310
|
+
mdc, ndc = nil
|
311
311
|
|
312
312
|
if Thread.current[Logging::MappedDiagnosticContext::NAME]
|
313
|
-
|
313
|
+
mdc = Thread.current[Logging::MappedDiagnosticContext::NAME].dup
|
314
314
|
end
|
315
315
|
|
316
316
|
if Thread.current[Logging::NestedDiagnosticContext::NAME]
|
317
|
-
|
317
|
+
ndc = Thread.current[Logging::NestedDiagnosticContext::NAME].dup
|
318
318
|
end
|
319
319
|
|
320
|
-
self.send(m,
|
320
|
+
self.send(m, *a) { |*args|
|
321
321
|
Logging::MappedDiagnosticContext.inherit(mdc)
|
322
322
|
Logging::NestedDiagnosticContext.inherit(ndc)
|
323
323
|
b.call(*args)
|
data/lib/logging/log_event.rb
CHANGED
@@ -13,7 +13,7 @@ module Logging
|
|
13
13
|
# * $3 == method name (might be nil)
|
14
14
|
CALLER_RGXP = %r/([-\.\/\(\)\w]+):(\d+)(?::in `(\w+)')?/o
|
15
15
|
#CALLER_INDEX = 2
|
16
|
-
CALLER_INDEX = ((defined? JRUBY_VERSION and JRUBY_VERSION
|
16
|
+
CALLER_INDEX = ((defined? JRUBY_VERSION and JRUBY_VERSION > '1.6') or (defined? RUBY_ENGINE and RUBY_ENGINE[%r/^rbx/i])) ? 1 : 2
|
17
17
|
# :startdoc:
|
18
18
|
|
19
19
|
# call-seq:
|
data/test/layouts/test_yaml.rb
CHANGED
@@ -98,7 +98,7 @@ module TestLayouts
|
|
98
98
|
assert_match %r/\A--- ?\nthread_id: -?\d+\n\z/, @layout.format(event)
|
99
99
|
|
100
100
|
@layout.items = %w[thread]
|
101
|
-
assert_match %r/\A--- ?\nthread:
|
101
|
+
assert_match %r/\A--- ?\nthread: ?\n/, @layout.format(event)
|
102
102
|
Thread.current[:name] = "Main"
|
103
103
|
assert_match %r/\A--- ?\nthread: Main\n/, @layout.format(event)
|
104
104
|
|
data/version.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.8.
|
1
|
+
1.8.1
|
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: 1.8.
|
4
|
+
version: 1.8.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-01-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: little-plugger
|
@@ -120,13 +120,16 @@ files:
|
|
120
120
|
- examples/classes.rb
|
121
121
|
- examples/colorization.rb
|
122
122
|
- examples/consolidation.rb
|
123
|
+
- examples/custom_log_levels.rb
|
123
124
|
- examples/fork.rb
|
124
125
|
- examples/formatting.rb
|
125
126
|
- examples/hierarchies.rb
|
126
127
|
- examples/layouts.rb
|
128
|
+
- examples/lazy.rb
|
127
129
|
- examples/loggers.rb
|
128
130
|
- examples/mdc.rb
|
129
131
|
- examples/names.rb
|
132
|
+
- examples/rspec_integration.rb
|
130
133
|
- examples/simple.rb
|
131
134
|
- lib/logging.rb
|
132
135
|
- lib/logging/appender.rb
|