logging 1.6.1 → 1.6.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +12 -0
- data/.rvmrc +47 -0
- data/History.txt +11 -0
- data/README.rdoc +1 -1
- data/examples/fork.rb +3 -3
- data/examples/simple.rb +1 -1
- data/lib/logging.rb +5 -5
- data/lib/logging/appender.rb +1 -2
- data/lib/logging/appenders.rb +1 -2
- data/lib/logging/appenders/buffering.rb +7 -7
- data/lib/logging/appenders/console.rb +2 -3
- data/lib/logging/appenders/email.rb +1 -1
- data/lib/logging/appenders/file.rb +1 -2
- data/lib/logging/appenders/growl.rb +3 -4
- data/lib/logging/appenders/io.rb +1 -1
- data/lib/logging/appenders/rolling_file.rb +3 -3
- data/lib/logging/appenders/string_io.rb +1 -1
- data/lib/logging/appenders/syslog.rb +4 -5
- data/lib/logging/color_scheme.rb +4 -4
- data/lib/logging/config/configurator.rb +4 -5
- data/lib/logging/config/yaml_configurator.rb +0 -1
- data/lib/logging/layout.rb +6 -7
- data/lib/logging/layouts.rb +0 -1
- data/lib/logging/layouts/basic.rb +1 -1
- data/lib/logging/layouts/parseable.rb +20 -6
- data/lib/logging/log_event.rb +1 -1
- data/lib/logging/logger.rb +2 -2
- data/lib/logging/proxy.rb +2 -2
- data/lib/logging/rails_compat.rb +1 -1
- data/lib/logging/repository.rb +1 -2
- data/lib/logging/root_logger.rb +1 -2
- data/lib/logging/stats.rb +5 -6
- data/lib/logging/utils.rb +1 -1
- data/lib/rspec/logging_helper.rb +1 -1
- data/test/appenders/test_syslog.rb +16 -12
- data/test/layouts/test_json.rb +1 -1
- data/test/layouts/test_yaml.rb +14 -14
- data/test/test_layout.rb +7 -3
- data/test/test_log_event.rb +1 -1
- data/version.txt +1 -1
- metadata +17 -15
data/.gitignore
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# git-ls-files --others --exclude-from=.git/info/exclude
|
2
|
+
# Lines that start with '#' are comments.
|
3
|
+
# For a project mostly in C, the following would be a good set of
|
4
|
+
# exclude patterns (uncomment them if you want to use them):
|
5
|
+
# *.[oa]
|
6
|
+
# *~
|
7
|
+
announcement.txt
|
8
|
+
coverage/
|
9
|
+
doc/
|
10
|
+
pkg/
|
11
|
+
tmp/
|
12
|
+
.rbx
|
data/.rvmrc
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
# This is an RVM Project .rvmrc file, used to automatically load the ruby
|
4
|
+
# development environment upon cd'ing into the directory
|
5
|
+
|
6
|
+
# First we specify our desired <ruby>[@<gemset>], the @gemset name is optional.
|
7
|
+
environment_id="ruby-1.9.2-p290@logging"
|
8
|
+
|
9
|
+
#
|
10
|
+
# Uncomment following line if you want options to be set only for given project.
|
11
|
+
#
|
12
|
+
# PROJECT_JRUBY_OPTS=( --1.9 )
|
13
|
+
|
14
|
+
#
|
15
|
+
# First we attempt to load the desired environment directly from the environment
|
16
|
+
# file. This is very fast and efficient compared to running through the entire
|
17
|
+
# CLI and selector. If you want feedback on which environment was used then
|
18
|
+
# insert the word 'use' after --create as this triggers verbose mode.
|
19
|
+
#
|
20
|
+
if [[ -d "${rvm_path:-$HOME/.rvm}/environments" \
|
21
|
+
&& -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
|
22
|
+
then
|
23
|
+
\. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
|
24
|
+
|
25
|
+
if [[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]]
|
26
|
+
then
|
27
|
+
. "${rvm_path:-$HOME/.rvm}/hooks/after_use"
|
28
|
+
fi
|
29
|
+
else
|
30
|
+
# If the environment file has not yet been created, use the RVM CLI to select.
|
31
|
+
if ! rvm --create "$environment_id"
|
32
|
+
then
|
33
|
+
echo "Failed to create RVM environment '${environment_id}'."
|
34
|
+
exit 1
|
35
|
+
fi
|
36
|
+
fi
|
37
|
+
|
38
|
+
#
|
39
|
+
# If you use an RVM gemset file to install a list of gems (*.gems), you can have
|
40
|
+
# it be automatically loaded. Uncomment the following and adjust the filename if
|
41
|
+
# necessary.
|
42
|
+
#
|
43
|
+
# filename=".gems"
|
44
|
+
# if [[ -s "$filename" ]] ; then
|
45
|
+
# rvm gemset import "$filename" | grep -v already | grep -v listed | grep -v complete | sed '/^$/d'
|
46
|
+
# fi
|
47
|
+
|
data/History.txt
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
== 1.6.2 / 2012-01-05
|
2
|
+
|
3
|
+
Bug Fixes
|
4
|
+
- Fix typo in the Readme [issue #14]
|
5
|
+
- Fix spelling in a variety of places [issue #15]
|
6
|
+
- Solaris does not have Syslog#LOG_PERROR defined [issue #17]
|
7
|
+
- Fix failing tests for Ruby 1.9.3 [issue #18]
|
8
|
+
- Check for RUBY_ENGINE for Ruby 1.8.7 [issue #19]
|
9
|
+
- Whitespace and '# EOF' cleanup
|
10
|
+
- Support for Rubinious
|
11
|
+
|
1
12
|
== 1.6.1 / 2011-09-09
|
2
13
|
|
3
14
|
Bug Fixes
|
data/README.rdoc
CHANGED
@@ -30,7 +30,7 @@ logged.
|
|
30
30
|
logger.debug "this debug message will not be output by the logger"
|
31
31
|
logger.warn "this is your last warning"
|
32
32
|
|
33
|
-
In this example, a single logger is
|
33
|
+
In this example, a single logger is created that will append to STDOUT and to a
|
34
34
|
file. Only log messages that are informational or higher will be logged.
|
35
35
|
|
36
36
|
require 'logging'
|
data/examples/fork.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
# :stopdoc:
|
2
2
|
#
|
3
3
|
# Because of the global interpreter lock, Kernel#fork is the best way
|
4
|
-
# to
|
5
|
-
# when using
|
6
|
-
#
|
4
|
+
# to achieve true concurrency in Ruby scripts. However, there are peculiarities
|
5
|
+
# when using fork and passing file descriptors between process. These
|
6
|
+
# peculiarities affect the logging framework.
|
7
7
|
#
|
8
8
|
# In short, always reopen file descriptors in the child process after fork has
|
9
9
|
# been called. The RollingFile appender uses flock to safely coordinate the
|
data/examples/simple.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
#
|
3
3
|
# Logging provides a simple, default logger configured in the same manner as
|
4
4
|
# the default Ruby Logger class -- i.e. the output of the two will be the
|
5
|
-
# same. All log
|
5
|
+
# same. All log messages at "warn" or higher are printed to STDOUT; any
|
6
6
|
# message below the "warn" level are discarded.
|
7
7
|
#
|
8
8
|
|
data/lib/logging.rb
CHANGED
@@ -192,8 +192,8 @@ module Logging
|
|
192
192
|
#
|
193
193
|
# If the "root" logger name is passed to this method then all loggers
|
194
194
|
# will consolidate to the root logger. In other words, only the root
|
195
|
-
# logger will be created, and it will be used by all classes and
|
196
|
-
# in the
|
195
|
+
# logger will be created, and it will be used by all classes and modules
|
196
|
+
# in the application.
|
197
197
|
#
|
198
198
|
# ==== Example
|
199
199
|
#
|
@@ -363,7 +363,7 @@ module Logging
|
|
363
363
|
end
|
364
364
|
|
365
365
|
# Returns the library path for the module. If any arguments are given,
|
366
|
-
# they will be joined to the end of the
|
366
|
+
# they will be joined to the end of the library path using
|
367
367
|
# <tt>File.join</tt>.
|
368
368
|
#
|
369
369
|
def libpath( *args, &block )
|
@@ -419,7 +419,7 @@ module Logging
|
|
419
419
|
#
|
420
420
|
# 1) name - the name of the logger
|
421
421
|
#
|
422
|
-
# 2) level - the logger level; if it is
|
422
|
+
# 2) level - the logger level; if it is preceded by an
|
423
423
|
# asterisk then the level was explicitly set for that
|
424
424
|
# logger (as opposed to being inherited from the parent
|
425
425
|
# logger)
|
@@ -470,7 +470,7 @@ module Logging
|
|
470
470
|
end
|
471
471
|
|
472
472
|
# :stopdoc:
|
473
|
-
# Convert the given level into a
|
473
|
+
# Convert the given level into a canonical form - a lowercase string.
|
474
474
|
def levelify( level )
|
475
475
|
case level
|
476
476
|
when String; level.downcase
|
data/lib/logging/appender.rb
CHANGED
@@ -122,7 +122,7 @@ class Appender
|
|
122
122
|
# appender.level = 'off'
|
123
123
|
# appender.level = :all
|
124
124
|
#
|
125
|
-
# These
|
125
|
+
# These produce an +ArgumentError+
|
126
126
|
#
|
127
127
|
# appender.level = Object
|
128
128
|
# appender.level = -1
|
@@ -257,4 +257,3 @@ private
|
|
257
257
|
end # class Appender
|
258
258
|
end # module Logging
|
259
259
|
|
260
|
-
# EOF
|
data/lib/logging/appenders.rb
CHANGED
@@ -74,7 +74,7 @@ module Logging
|
|
74
74
|
# call-seq:
|
75
75
|
# Appenders[name]
|
76
76
|
#
|
77
|
-
# Returns the appender instance
|
77
|
+
# Returns the appender instance stored in the appender hash under the
|
78
78
|
# key _name_, or +nil+ if no appender has been created using that name.
|
79
79
|
#
|
80
80
|
def []( name ) @appenders[name] end
|
@@ -134,4 +134,3 @@ Logging.libpath {
|
|
134
134
|
require 'logging/appenders/syslog'
|
135
135
|
}
|
136
136
|
|
137
|
-
# EOF
|
@@ -43,7 +43,7 @@ module Logging::Appenders
|
|
43
43
|
super(*args, &block)
|
44
44
|
end
|
45
45
|
|
46
|
-
# Close the message buffer by
|
46
|
+
# Close the message buffer by flushing all log events to the appender. If a
|
47
47
|
# periodic flusher thread is running, shut it down and allow it to exit.
|
48
48
|
#
|
49
49
|
def close( *args )
|
@@ -58,7 +58,7 @@ module Logging::Appenders
|
|
58
58
|
super(*args)
|
59
59
|
end
|
60
60
|
|
61
|
-
# Reopen the connection to the underlying logging destination. In
|
61
|
+
# Reopen the connection to the underlying logging destination. In addition
|
62
62
|
# if the appender is configured for periodic flushing, then the flushing
|
63
63
|
# thread will be stopped and restarted.
|
64
64
|
#
|
@@ -91,8 +91,8 @@ module Logging::Appenders
|
|
91
91
|
# even though it is a higher level. Both must be explicitly passed to
|
92
92
|
# this assignment.
|
93
93
|
#
|
94
|
-
# You can pass in a single
|
95
|
-
# names or numbers, or a string
|
94
|
+
# You can pass in a single level name or number, an array of level
|
95
|
+
# names or numbers, or a string containing a comma separated list of level
|
96
96
|
# names or numbers.
|
97
97
|
#
|
98
98
|
# immediate_at = :error
|
@@ -132,8 +132,8 @@ module Logging::Appenders
|
|
132
132
|
# nil OR
|
133
133
|
# 0 : only flush when the buffer is full (500 messages)
|
134
134
|
#
|
135
|
-
# If the default buffer size of 500 is too small, you can
|
136
|
-
# configure to be as large as you want. This will consume more memory.
|
135
|
+
# If the default buffer size of 500 is too small, then you can manually
|
136
|
+
# configure it to be as large as you want. This will consume more memory.
|
137
137
|
#
|
138
138
|
# auto_flushing = 42_000
|
139
139
|
#
|
@@ -274,7 +274,7 @@ module Logging::Appenders
|
|
274
274
|
|
275
275
|
# Using the flush_period, create a new PeriodicFlusher attached to this
|
276
276
|
# appender. If the flush_period is nil, then no action will be taken. If a
|
277
|
-
# PeriodicFlusher
|
277
|
+
# PeriodicFlusher already exists, it will be stopped and a new one will be
|
278
278
|
# created.
|
279
279
|
#
|
280
280
|
def _setup_periodic_flusher
|
@@ -22,7 +22,7 @@ module Logging::Appenders
|
|
22
22
|
#
|
23
23
|
def initialize( *args )
|
24
24
|
opts = Hash === args.last ? args.pop : {}
|
25
|
-
name = args.empty? ? 'stdout' : args.shift
|
25
|
+
name = args.empty? ? 'stdout' : args.shift
|
26
26
|
|
27
27
|
super(name, STDOUT, opts)
|
28
28
|
end
|
@@ -49,7 +49,7 @@ module Logging::Appenders
|
|
49
49
|
#
|
50
50
|
def initialize( *args )
|
51
51
|
opts = Hash === args.last ? args.pop : {}
|
52
|
-
name = args.empty? ? 'stderr' : args.shift
|
52
|
+
name = args.empty? ? 'stderr' : args.shift
|
53
53
|
|
54
54
|
super(name, STDERR, opts)
|
55
55
|
end
|
@@ -57,4 +57,3 @@ module Logging::Appenders
|
|
57
57
|
|
58
58
|
end # module Logging::Appenders
|
59
59
|
|
60
|
-
# EOF
|
@@ -2,7 +2,7 @@
|
|
2
2
|
require 'net/smtp'
|
3
3
|
require 'time' # get rfc822 time format
|
4
4
|
|
5
|
-
# a replacement EmailOutputter. This is essentially the default
|
5
|
+
# a replacement EmailOutputter. This is essentially the default EmailOutputter from Log4r but with the following
|
6
6
|
# changes:
|
7
7
|
# 1) if there is data to send in an email, then do not send anything
|
8
8
|
# 2) connect to the smtp server at the last minute, do not connect at startup and then send later on.
|
@@ -37,7 +37,7 @@ module Logging::Appenders
|
|
37
37
|
# logging destination. If the file does not already exist it will be
|
38
38
|
# created. If the :truncate option is set to +true+ then the file will
|
39
39
|
# be truncated before writing begins; otherwise, log messages will be
|
40
|
-
#
|
40
|
+
# appended to the file.
|
41
41
|
#
|
42
42
|
def initialize( name, opts = {} )
|
43
43
|
@fn = opts.getopt(:filename, name)
|
@@ -73,4 +73,3 @@ module Logging::Appenders
|
|
73
73
|
end # class FileAppender
|
74
74
|
end # module Logging::Appenders
|
75
75
|
|
76
|
-
# EOF
|
@@ -49,7 +49,7 @@ module Logging::Appenders
|
|
49
49
|
# notification levels. This is needed in order to log events at the
|
50
50
|
# proper Growl level.
|
51
51
|
#
|
52
|
-
# Without any configuration, the following
|
52
|
+
# Without any configuration, the following mapping will be used:
|
53
53
|
#
|
54
54
|
# :debug => -2
|
55
55
|
# :info => -1
|
@@ -73,7 +73,7 @@ module Logging::Appenders
|
|
73
73
|
# write( event )
|
74
74
|
#
|
75
75
|
# Write the given _event_ to the growl notification facility. The log
|
76
|
-
# event will be processed through the Layout
|
76
|
+
# event will be processed through the Layout associated with this
|
77
77
|
# appender. The message will be logged at the level specified by the
|
78
78
|
# event.
|
79
79
|
#
|
@@ -145,7 +145,7 @@ module Logging::Appenders
|
|
145
145
|
qmsg = @c_queue.last
|
146
146
|
if qmsg.first != msg.first or qmsg.last != msg.last
|
147
147
|
@c_queue << msg
|
148
|
-
else
|
148
|
+
else
|
149
149
|
qmsg[1] << "\n" << msg[1]
|
150
150
|
end
|
151
151
|
end
|
@@ -194,4 +194,3 @@ module Logging::Appenders
|
|
194
194
|
end # class Growl
|
195
195
|
end # module Logging::Appenders
|
196
196
|
|
197
|
-
# EOF
|
data/lib/logging/appenders/io.rb
CHANGED
@@ -256,7 +256,7 @@ module Logging::Appenders
|
|
256
256
|
|
257
257
|
files = Dir.glob(@glob).find_all {|fn| @rgxp =~ fn}
|
258
258
|
unless files.empty?
|
259
|
-
# sort the files in
|
259
|
+
# sort the files in reverse order based on their count number
|
260
260
|
files = files.sort do |a,b|
|
261
261
|
a = Integer(@rgxp.match(a)[1])
|
262
262
|
b = Integer(@rgxp.match(b)[1])
|
@@ -274,7 +274,7 @@ module Logging::Appenders
|
|
274
274
|
end
|
275
275
|
end
|
276
276
|
|
277
|
-
# finally
|
277
|
+
# finally rename the copied log file
|
278
278
|
::File.rename(@fn_copy, sprintf(@logname_fmt, 1))
|
279
279
|
ensure
|
280
280
|
@roll = false
|
@@ -307,7 +307,7 @@ module Logging::Appenders
|
|
307
307
|
def roll_files
|
308
308
|
return unless @roll and ::File.exist?(@fn_copy)
|
309
309
|
|
310
|
-
#
|
310
|
+
# rename the copied log file
|
311
311
|
::File.rename(@fn_copy, Time.now.strftime(@logname_fmt))
|
312
312
|
|
313
313
|
# prune old log files
|
@@ -12,7 +12,7 @@ module Logging::Appenders
|
|
12
12
|
# call-seq:
|
13
13
|
# StringIo.new( name, opts = {} )
|
14
14
|
#
|
15
|
-
# Creates a new
|
15
|
+
# Creates a new StringIo appender that will append log messages to a
|
16
16
|
# StringIO instance.
|
17
17
|
#
|
18
18
|
def initialize( name, opts = {} )
|
@@ -39,7 +39,7 @@ module Logging::Appenders
|
|
39
39
|
# which file descriptors are allocated.
|
40
40
|
#
|
41
41
|
# LOG_PERROR Write the message to standard error output as well to
|
42
|
-
# the system log.
|
42
|
+
# the system log. Not available on Solaris.
|
43
43
|
#
|
44
44
|
# LOG_PID Log the process id with each message: useful for
|
45
45
|
# identifying instantiations of daemons.
|
@@ -107,7 +107,7 @@ module Logging::Appenders
|
|
107
107
|
# Configure the mapping from the Logging levels to the syslog levels.
|
108
108
|
# This is needed in order to log events at the proper syslog level.
|
109
109
|
#
|
110
|
-
# Without any configuration, the following
|
110
|
+
# Without any configuration, the following mapping will be used:
|
111
111
|
#
|
112
112
|
# :debug => LOG_DEBUG
|
113
113
|
# :info => LOG_INFO
|
@@ -127,7 +127,7 @@ module Logging::Appenders
|
|
127
127
|
# call-seq:
|
128
128
|
# close
|
129
129
|
#
|
130
|
-
# Closes the
|
130
|
+
# Closes the connection to the syslog facility.
|
131
131
|
#
|
132
132
|
def close( footer = true )
|
133
133
|
super
|
@@ -168,7 +168,7 @@ module Logging::Appenders
|
|
168
168
|
# write( event )
|
169
169
|
#
|
170
170
|
# Write the given _event_ to the syslog facility. The log event will be
|
171
|
-
# processed through the Layout
|
171
|
+
# processed through the Layout associated with this appender. The message
|
172
172
|
# will be logged at the level specified by the event.
|
173
173
|
#
|
174
174
|
def write( event )
|
@@ -207,4 +207,3 @@ module Logging::Appenders
|
|
207
207
|
end # module Logging::Appenders
|
208
208
|
end # HAVE_SYSLOG
|
209
209
|
|
210
|
-
# EOF
|
data/lib/logging/color_scheme.rb
CHANGED
@@ -17,13 +17,13 @@ module Logging
|
|
17
17
|
# ColorScheme objects are used by the Pattern layout code to colorize log
|
18
18
|
# messages. Each color scheme is given a unique name which is used by the
|
19
19
|
# Pattern layout to lookup the appropriate color scheme to use. Please
|
20
|
-
#
|
20
|
+
# refer to the Pattern layout documentation for more details - specifically
|
21
21
|
# the initializer documentation.
|
22
22
|
#
|
23
23
|
# The color scheme can be applied to the Pattern layout in several ways.
|
24
24
|
# Each token in the log pattern can be colorized with the log level (debug,
|
25
25
|
# info, warn, etc) receiving unique colors based on the level itself.
|
26
|
-
# Another option is to colorize the
|
26
|
+
# Another option is to colorize the entire log message based on the log
|
27
27
|
# level; in this mode tokens do not get their own colors. Please see the
|
28
28
|
# ColorScheme initializer for the list of colorization options.
|
29
29
|
#
|
@@ -71,7 +71,7 @@ module Logging
|
|
71
71
|
# end of this file. Multiple color codes can be aliased by grouping them
|
72
72
|
# in an array as shown in the example above.
|
73
73
|
#
|
74
|
-
# Since color
|
74
|
+
# Since color schemes are primary intended to be used with the Pattern
|
75
75
|
# layout, there are a few special options of note. First the log levels
|
76
76
|
# are enumerated in their own hash:
|
77
77
|
#
|
@@ -85,7 +85,7 @@ module Logging
|
|
85
85
|
#
|
86
86
|
# The log level token will be colorized differently based on the value of
|
87
87
|
# the log level itself. Similarly the entire log message can be colorized
|
88
|
-
# based on the value of the log level. A
|
88
|
+
# based on the value of the log level. A different option should be given
|
89
89
|
# for this behavior:
|
90
90
|
#
|
91
91
|
# :lines => {
|
@@ -10,7 +10,7 @@ module Logging::Config
|
|
10
10
|
class Error < StandardError; end # :nodoc:
|
11
11
|
|
12
12
|
# call-seq:
|
13
|
-
#
|
13
|
+
# Configurator.process( &block )
|
14
14
|
#
|
15
15
|
def self.process( &block )
|
16
16
|
new.load(&block)
|
@@ -79,7 +79,7 @@ module Logging::Config
|
|
79
79
|
ary.each do |name, config|
|
80
80
|
l = Logging::Logger[name]
|
81
81
|
l.level = config[:level] if config[:level]
|
82
|
-
l.additive = config[:additive] if l.respond_to? :additive=
|
82
|
+
l.additive = config[:additive] if l.respond_to? :additive=
|
83
83
|
l.trace = config[:trace]
|
84
84
|
l.appenders = Array(config[:appenders]).
|
85
85
|
map {|nm| ::Logging::Appenders[nm]}
|
@@ -105,7 +105,7 @@ module Logging::Config
|
|
105
105
|
|
106
106
|
clazz = ::Logging::Appenders.const_get type
|
107
107
|
clazz.new(name, config)
|
108
|
-
rescue NameError
|
108
|
+
rescue NameError
|
109
109
|
raise Error, "unknown appender class Logging::Appenders::#{type}"
|
110
110
|
end
|
111
111
|
|
@@ -125,7 +125,7 @@ module Logging::Config
|
|
125
125
|
|
126
126
|
clazz = ::Logging::Layouts.const_get type
|
127
127
|
clazz.new config
|
128
|
-
rescue NameError
|
128
|
+
rescue NameError
|
129
129
|
raise Error, "unknown layout class Logging::Layouts::#{type}"
|
130
130
|
end
|
131
131
|
|
@@ -185,4 +185,3 @@ module Logging::Config
|
|
185
185
|
end # class Configurator
|
186
186
|
end # module Logging::Config
|
187
187
|
|
188
|
-
# EOF
|
data/lib/logging/layout.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
|
2
2
|
module Logging
|
3
3
|
|
4
4
|
# The +Layout+ class provides methods for formatting log events into a
|
@@ -14,7 +14,7 @@ class Layout
|
|
14
14
|
# call-seq:
|
15
15
|
# Layout.new( :format_as => :string )
|
16
16
|
#
|
17
|
-
# Creates a new layout that will format
|
17
|
+
# Creates a new layout that will format objects as strings using the
|
18
18
|
# given <tt>:format_as</tt> style. This can be one of <tt>:string</tt>,
|
19
19
|
# <tt>:inspect</tt>, or <tt>:yaml</tt>. These formatting commands map to
|
20
20
|
# the following object methods:
|
@@ -52,7 +52,7 @@ class Layout
|
|
52
52
|
# call-seq:
|
53
53
|
# format( event )
|
54
54
|
#
|
55
|
-
# Returns a string representation of the given
|
55
|
+
# Returns a string representation of the given logging _event_. It is
|
56
56
|
# up to subclasses to implement this method.
|
57
57
|
#
|
58
58
|
def format( event ) nil end
|
@@ -70,19 +70,19 @@ class Layout
|
|
70
70
|
#
|
71
71
|
# Returns a footer string to be used at the end of a logging appender.
|
72
72
|
#
|
73
|
-
def footer( ) '' end
|
73
|
+
def footer( ) '' end
|
74
74
|
|
75
75
|
# call-seq:
|
76
76
|
# format_obj( obj )
|
77
77
|
#
|
78
78
|
# Return a string representation of the given object. Depending upon
|
79
79
|
# the configuration of the logger system the format will be an +inspect+
|
80
|
-
# based
|
80
|
+
# based representation or a +yaml+ based representation.
|
81
81
|
#
|
82
82
|
def format_obj( obj )
|
83
83
|
case obj
|
84
84
|
when String; obj
|
85
|
-
when Exception
|
85
|
+
when Exception
|
86
86
|
str = "<#{obj.class.name}> #{obj.message}"
|
87
87
|
if @backtrace && !obj.backtrace.nil?
|
88
88
|
str << "\n\t" << obj.backtrace.join("\n\t")
|
@@ -114,4 +114,3 @@ class Layout
|
|
114
114
|
end # class Layout
|
115
115
|
end # module Logging
|
116
116
|
|
117
|
-
# EOF
|
data/lib/logging/layouts.rb
CHANGED
@@ -17,7 +17,7 @@ module Logging::Layouts
|
|
17
17
|
# call-seq:
|
18
18
|
# format( event )
|
19
19
|
#
|
20
|
-
# Returns a string representation of the given
|
20
|
+
# Returns a string representation of the given logging _event_. See the
|
21
21
|
# class documentation for details about the formatting used.
|
22
22
|
#
|
23
23
|
def format( event )
|
@@ -58,10 +58,10 @@ module Logging::Layouts
|
|
58
58
|
#
|
59
59
|
# The output order of the fields is not guaranteed to be the same as the
|
60
60
|
# order specified in the _items_ list. This is because Ruby hashes are not
|
61
|
-
# ordered by default (unless
|
61
|
+
# ordered by default (unless you're running this in Ruby 1.9).
|
62
62
|
#
|
63
63
|
# When configured to output log events in JSON format, each log message
|
64
|
-
# will be formatted as an object (in the JSON sense of the
|
64
|
+
# will be formatted as an object (in the JSON sense of the word) on it's
|
65
65
|
# own line in the log output. Therefore, to parse the output you must read
|
66
66
|
# it line by line and parse the individual objects. Taking the same
|
67
67
|
# example above the JSON output would be:
|
@@ -78,7 +78,7 @@ module Logging::Layouts
|
|
78
78
|
# Arguments to sprintf keyed to directive letters
|
79
79
|
DIRECTIVE_TABLE = {
|
80
80
|
'logger' => 'event.logger',
|
81
|
-
'timestamp' => 'event.time
|
81
|
+
'timestamp' => 'event.time',
|
82
82
|
'level' => '::Logging::LNAMES[event.level]',
|
83
83
|
'message' => 'format_obj(event.data)',
|
84
84
|
'file' => 'event.file',
|
@@ -132,7 +132,7 @@ module Logging::Layouts
|
|
132
132
|
# call-seq:
|
133
133
|
# Parseable.json( opts )
|
134
134
|
#
|
135
|
-
# Create a new Parseable layout that outputs log events
|
135
|
+
# Create a new Parseable layout that outputs log events using JSON style
|
136
136
|
# formatting. See the initializer documentation for available options.
|
137
137
|
#
|
138
138
|
def self.json( opts = {} )
|
@@ -143,7 +143,7 @@ module Logging::Layouts
|
|
143
143
|
# call-seq:
|
144
144
|
# Parseable.yaml( opts )
|
145
145
|
#
|
146
|
-
# Create a new Parseable layout that outputs log events
|
146
|
+
# Create a new Parseable layout that outputs log events using YAML style
|
147
147
|
# formatting. See the initializer documentation for available options.
|
148
148
|
#
|
149
149
|
def self.yaml( opts = {} )
|
@@ -191,7 +191,8 @@ module Logging::Layouts
|
|
191
191
|
case value
|
192
192
|
when String, Integer, Float; value.inspect
|
193
193
|
when nil; 'null'
|
194
|
-
|
194
|
+
when Time; %Q{"#{iso8601_format(value)}"}
|
195
|
+
else %Q{"#{value.inspect}"} end
|
195
196
|
end
|
196
197
|
|
197
198
|
# Call the appropriate class level create format method based on the
|
@@ -204,6 +205,19 @@ module Logging::Layouts
|
|
204
205
|
else raise ArgumentError, "unknown format style '#@style'" end
|
205
206
|
end
|
206
207
|
|
208
|
+
# Convert the given time _value_ into an ISO8601 formatted time string.
|
209
|
+
#
|
210
|
+
def iso8601_format( value )
|
211
|
+
str = value.strftime('%Y-%m-%dT%H:%M:%S')
|
212
|
+
str << ('.%06d' % value.usec)
|
213
|
+
|
214
|
+
offset = value.gmt_offset.abs
|
215
|
+
return str << 'Z' if offset == 0
|
216
|
+
|
217
|
+
offset = sprintf('%02d:%02d', offset / 3600, offset % 3600 / 60)
|
218
|
+
return str << (value.gmt_offset < 0 ? '-' : '+') << offset
|
219
|
+
end
|
220
|
+
|
207
221
|
end # Parseable
|
208
222
|
end # Logging::Layouts
|
209
223
|
|
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[%r/^1.6/]) ? 1 : 2
|
16
|
+
CALLER_INDEX = ((defined? JRUBY_VERSION and JRUBY_VERSION[%r/^1.6/]) or (defined? RUBY_ENGINE and RUBY_ENGINE[%r/^rbx/i])) ? 1 : 2
|
17
17
|
# :startdoc:
|
18
18
|
|
19
19
|
# call-seq:
|
data/lib/logging/logger.rb
CHANGED
@@ -209,7 +209,7 @@ module Logging
|
|
209
209
|
# This method returns +true+ if the message was logged, and +false+ is
|
210
210
|
# returned if the message was not logged.
|
211
211
|
#
|
212
|
-
def add( lvl, data = nil )
|
212
|
+
def add( lvl, data = nil, progname = nil )
|
213
213
|
lvl = Integer(lvl)
|
214
214
|
return false if lvl < level
|
215
215
|
|
@@ -280,7 +280,7 @@ module Logging
|
|
280
280
|
# log.level = 'off'
|
281
281
|
# log.level = :all
|
282
282
|
#
|
283
|
-
# These
|
283
|
+
# These produce an +ArgumentError+
|
284
284
|
#
|
285
285
|
# log.level = Object
|
286
286
|
# log.level = -1
|
data/lib/logging/proxy.rb
CHANGED
@@ -17,7 +17,7 @@ module Logging
|
|
17
17
|
# result # <-- always return the result
|
18
18
|
# end
|
19
19
|
#
|
20
|
-
# The proxied object is
|
20
|
+
# The proxied object is available as the "@object" variable. The logger is
|
21
21
|
# available as the "@logger" variable.
|
22
22
|
#
|
23
23
|
class Proxy
|
@@ -30,7 +30,7 @@ module Logging
|
|
30
30
|
|
31
31
|
# Create a new proxy for the given _object_. If an optional _block_ is
|
32
32
|
# given it will be called before the proxied method. This _block_ will
|
33
|
-
# replace the +method_missing+ implementation
|
33
|
+
# replace the +method_missing+ implementation
|
34
34
|
#
|
35
35
|
def initialize( object, &block )
|
36
36
|
@object = object
|
data/lib/logging/rails_compat.rb
CHANGED
@@ -14,7 +14,7 @@ module Logging
|
|
14
14
|
|
15
15
|
# A no-op implementation of the +silence+ method. Setting of log levels
|
16
16
|
# should be done during the Logging configuration. It is the author's
|
17
|
-
# opinion that overriding the log level
|
17
|
+
# opinion that overriding the log level programmatically is a logical
|
18
18
|
# error.
|
19
19
|
#
|
20
20
|
# Please see https://github.com/TwP/logging/issues/11 for a more detail
|
data/lib/logging/repository.rb
CHANGED
@@ -185,7 +185,7 @@ module Logging
|
|
185
185
|
# call-seq:
|
186
186
|
# master_for( key )
|
187
187
|
#
|
188
|
-
#
|
188
|
+
# Returns the consolidation master name for the given _key_. If there is
|
189
189
|
# no consolidation master, then +nil+ is returned.
|
190
190
|
#
|
191
191
|
def master_for( key )
|
@@ -229,4 +229,3 @@ module Logging
|
|
229
229
|
end # class Repository
|
230
230
|
end # module Logging
|
231
231
|
|
232
|
-
# EOF
|
data/lib/logging/root_logger.rb
CHANGED
@@ -3,7 +3,7 @@ module Logging
|
|
3
3
|
|
4
4
|
# The root logger exists to ensure that all loggers have a parent and a
|
5
5
|
# defined logging level. If a logger is additive, eventually its log
|
6
|
-
# events will
|
6
|
+
# events will propagate up to the root logger.
|
7
7
|
#
|
8
8
|
class RootLogger < Logger
|
9
9
|
|
@@ -58,4 +58,3 @@ module Logging
|
|
58
58
|
end # class RootLogger
|
59
59
|
end # module Logging
|
60
60
|
|
61
|
-
# EOF
|
data/lib/logging/stats.rb
CHANGED
@@ -40,7 +40,7 @@ module Logging::Stats
|
|
40
40
|
# Coalesce the statistics from the _other_ sampler into this one. The
|
41
41
|
# _other_ sampler is not modified by this method.
|
42
42
|
#
|
43
|
-
# Coalescing the same two samplers
|
43
|
+
# Coalescing the same two samplers multiple times should only be done if
|
44
44
|
# one of the samplers is reset between calls to this method. Otherwise
|
45
45
|
# statistics will be counted multiple times.
|
46
46
|
#
|
@@ -72,7 +72,7 @@ module Logging::Stats
|
|
72
72
|
|
73
73
|
# Returns statistics in a common format.
|
74
74
|
#
|
75
|
-
def to_s
|
75
|
+
def to_s
|
76
76
|
"[%s]: SUM=%0.6f, SUMSQ=%0.6f, NUM=%d, MEAN=%0.6f, SD=%0.6f, MIN=%0.6f, MAX=%0.6f" % to_a
|
77
77
|
end
|
78
78
|
|
@@ -127,7 +127,7 @@ module Logging::Stats
|
|
127
127
|
|
128
128
|
# Adds a time delta between now and the last time you called this. This
|
129
129
|
# will give you the average time between two activities.
|
130
|
-
#
|
130
|
+
#
|
131
131
|
# An example is:
|
132
132
|
#
|
133
133
|
# t = Sampler.new("do_stuff")
|
@@ -148,7 +148,7 @@ module Logging::Stats
|
|
148
148
|
|
149
149
|
attr_reader :stats
|
150
150
|
|
151
|
-
# Create a new Tracker instance. An optional boolean can be
|
151
|
+
# Create a new Tracker instance. An optional boolean can be passed in to
|
152
152
|
# change the "threadsafe" value of the tracker. By default all trackers
|
153
153
|
# are created to be threadsafe.
|
154
154
|
#
|
@@ -163,7 +163,7 @@ module Logging::Stats
|
|
163
163
|
# Coalesce the samplers from the _other_ tracker into this one. The
|
164
164
|
# _other_ tracker is not modified by this method.
|
165
165
|
#
|
166
|
-
# Coalescing the same two trackers
|
166
|
+
# Coalescing the same two trackers multiple times should only be done if
|
167
167
|
# one of the trackers is reset between calls to this method. Otherwise
|
168
168
|
# statistics will be counted multiple times.
|
169
169
|
#
|
@@ -275,4 +275,3 @@ module Logging::Stats
|
|
275
275
|
|
276
276
|
end # module Logging::Stats
|
277
277
|
|
278
|
-
# EOF
|
data/lib/logging/utils.rb
CHANGED
data/lib/rspec/logging_helper.rb
CHANGED
@@ -4,7 +4,7 @@ module RSpec
|
|
4
4
|
|
5
5
|
# Capture log messages from the Logging framework and make them
|
6
6
|
# available via a @log_output instance variable. The @log_output
|
7
|
-
# supports a readline method to access the log
|
7
|
+
# supports a readline method to access the log messages.
|
8
8
|
#
|
9
9
|
def capture_log_messages( opts = {} )
|
10
10
|
from = opts.getopt(:from, 'root')
|
@@ -14,9 +14,9 @@ module TestAppenders
|
|
14
14
|
super
|
15
15
|
Logging.init
|
16
16
|
@levels = Logging::LEVELS
|
17
|
-
@logopt
|
18
|
-
|
19
|
-
|
17
|
+
@logopt = 0
|
18
|
+
@logopt |= ::Syslog::LOG_NDELAY if defined?(::Syslog::LOG_NDELAY)
|
19
|
+
@logopt |= ::Syslog::LOG_PERROR if defined?(::Syslog::LOG_PERROR)
|
20
20
|
end
|
21
21
|
|
22
22
|
def test_append
|
@@ -51,12 +51,14 @@ module TestAppenders
|
|
51
51
|
stderr[1].close
|
52
52
|
Process.waitpid(pid)
|
53
53
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
54
|
+
if defined?(::Syslog::LOG_PERROR)
|
55
|
+
assert_equal("syslog_test: INFO TestLogger : <Array> #{[1,2,3,4]}\n",
|
56
|
+
stderr[0].gets)
|
57
|
+
assert_equal("syslog_test: DEBUG TestLogger : the big log message\n",
|
58
|
+
stderr[0].gets)
|
59
|
+
assert_equal("syslog_test: WARN TestLogger : this is your last warning\n",
|
60
|
+
stderr[0].gets)
|
61
|
+
end
|
60
62
|
end
|
61
63
|
|
62
64
|
def test_append_error
|
@@ -98,9 +100,11 @@ module TestAppenders
|
|
98
100
|
stderr[1].close
|
99
101
|
Process.waitpid(pid)
|
100
102
|
|
101
|
-
|
102
|
-
|
103
|
-
|
103
|
+
if defined?(::Syslog::LOG_PERROR)
|
104
|
+
assert_equal("syslog_test: this is a test message\n", stderr[0].gets)
|
105
|
+
assert_equal("syslog_test: this is another message\n", stderr[0].gets)
|
106
|
+
assert_equal("syslog_test: some other line\n", stderr[0].gets)
|
107
|
+
end
|
104
108
|
end
|
105
109
|
|
106
110
|
def test_concat_error
|
data/test/layouts/test_json.rb
CHANGED
@@ -11,7 +11,7 @@ module TestLayouts
|
|
11
11
|
super
|
12
12
|
@layout = Logging.layouts.json({})
|
13
13
|
@levels = Logging::LEVELS
|
14
|
-
@date_fmt = '\d{4}-\d{2}-\d{2}
|
14
|
+
@date_fmt = '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{6}(Z|[+-]\d{2}:\d{2})'
|
15
15
|
Thread.current[:name] = nil
|
16
16
|
end
|
17
17
|
|
data/test/layouts/test_yaml.rb
CHANGED
@@ -11,7 +11,7 @@ module TestLayouts
|
|
11
11
|
super
|
12
12
|
@layout = Logging.layouts.yaml({})
|
13
13
|
@levels = Logging::LEVELS
|
14
|
-
@date_fmt = '\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}'
|
14
|
+
@date_fmt = '\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{6,9} (Z|[+-]\d{2}:\d{2})'
|
15
15
|
Thread.current[:name] = nil
|
16
16
|
end
|
17
17
|
|
@@ -55,7 +55,7 @@ module TestLayouts
|
|
55
55
|
|
56
56
|
@layout.items = %w[timestamp]
|
57
57
|
assert_equal %w[timestamp], @layout.items
|
58
|
-
assert_match %r
|
58
|
+
assert_match %r/\A--- ?\ntimestamp: '?#@date_fmt'?\n/, @layout.format(event)
|
59
59
|
|
60
60
|
# 'foo' is not a recognized item
|
61
61
|
assert_raise(ArgumentError) {
|
@@ -71,36 +71,36 @@ module TestLayouts
|
|
71
71
|
event.method = 'method_name'
|
72
72
|
|
73
73
|
@layout.items = %w[logger]
|
74
|
-
|
74
|
+
assert_match %r/\A--- ?\nlogger: TestLogger\n/, @layout.format(event)
|
75
75
|
|
76
76
|
@layout.items = %w[file]
|
77
|
-
|
77
|
+
assert_match %r/\A--- ?\nfile: test_file.rb\n/, @layout.format(event)
|
78
78
|
|
79
79
|
@layout.items = %w[level]
|
80
|
-
|
80
|
+
assert_match %r/\A--- ?\nlevel: INFO\n/, @layout.format(event)
|
81
81
|
|
82
82
|
@layout.items = %w[line]
|
83
|
-
|
83
|
+
assert_match %r/\A--- ?\nline: 123\n/, @layout.format(event)
|
84
84
|
|
85
85
|
@layout.items = %w[message]
|
86
|
-
|
86
|
+
assert_match %r/\A--- ?\nmessage: log message\n/, @layout.format(event)
|
87
87
|
|
88
88
|
@layout.items = %w[method]
|
89
|
-
|
89
|
+
assert_match %r/\A--- ?\nmethod: method_name\n/, @layout.format(event)
|
90
90
|
|
91
91
|
@layout.items = %w[pid]
|
92
|
-
assert_match %r/\A---
|
92
|
+
assert_match %r/\A--- ?\npid: \d+\n\z/, @layout.format(event)
|
93
93
|
|
94
94
|
@layout.items = %w[millis]
|
95
|
-
assert_match %r/\A---
|
95
|
+
assert_match %r/\A--- ?\nmillis: \d+\n\z/, @layout.format(event)
|
96
96
|
|
97
97
|
@layout.items = %w[thread_id]
|
98
|
-
assert_match %r/\A---
|
98
|
+
assert_match %r/\A--- ?\nthread_id: -?\d+\n\z/, @layout.format(event)
|
99
99
|
|
100
100
|
@layout.items = %w[thread]
|
101
|
-
|
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
|
end
|
105
105
|
|
106
106
|
private
|
@@ -108,7 +108,7 @@ module TestLayouts
|
|
108
108
|
def assert_yaml_match( expected, actual )
|
109
109
|
actual = YAML.load(actual)
|
110
110
|
|
111
|
-
|
111
|
+
assert_instance_of Time, actual['timestamp']
|
112
112
|
assert_equal expected['level'], actual['level']
|
113
113
|
assert_equal expected['logger'], actual['logger']
|
114
114
|
assert_equal expected['message'], actual['message']
|
data/test/test_layout.rb
CHANGED
@@ -75,10 +75,14 @@ module TestLogging
|
|
75
75
|
|
76
76
|
@layout = ::Logging::Layout.new :format_as => :yaml
|
77
77
|
r = @layout.format_obj obj
|
78
|
-
|
79
|
-
|
78
|
+
assert_match %r/\A<Array> \n--- ?\n- one\n- two\n- three\n- four\n/, r
|
79
|
+
|
80
80
|
r = @layout.format_obj Class
|
81
|
-
|
81
|
+
if defined? YAML::ENGINE and YAML::ENGINE.yamler == 'psych'
|
82
|
+
assert_equal "<Class> \n--- !ruby/class 'Class'\n", r
|
83
|
+
else
|
84
|
+
assert_equal "<Class> Class", r
|
85
|
+
end
|
82
86
|
end
|
83
87
|
|
84
88
|
def test_format_obj_without_backtrace
|
data/test/test_log_event.rb
CHANGED
data/version.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.6.
|
1
|
+
1.6.2
|
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.6.
|
4
|
+
version: 1.6.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,22 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-01-05 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: little-plugger
|
16
|
-
requirement: &
|
16
|
+
requirement: &2157085220 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 1.1.
|
21
|
+
version: 1.1.3
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2157085220
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: flexmock
|
27
|
-
requirement: &
|
27
|
+
requirement: &2157077040 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 0.9.0
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2157077040
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: bones-git
|
38
|
-
requirement: &
|
38
|
+
requirement: &2157076220 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 1.2.4
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2157076220
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: bones-rcov
|
49
|
-
requirement: &
|
49
|
+
requirement: &2157075340 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,18 +54,18 @@ dependencies:
|
|
54
54
|
version: 1.0.1
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2157075340
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: bones
|
60
|
-
requirement: &
|
60
|
+
requirement: &2157074540 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
64
64
|
- !ruby/object:Gem::Version
|
65
|
-
version: 3.7.
|
65
|
+
version: 3.7.2
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2157074540
|
69
69
|
description: ! 'Logging is a flexible logging library for use in Ruby programs based
|
70
70
|
on the
|
71
71
|
|
@@ -81,6 +81,8 @@ extra_rdoc_files:
|
|
81
81
|
- History.txt
|
82
82
|
- README.rdoc
|
83
83
|
files:
|
84
|
+
- .gitignore
|
85
|
+
- .rvmrc
|
84
86
|
- History.txt
|
85
87
|
- README.rdoc
|
86
88
|
- Rakefile
|
@@ -184,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
184
186
|
version: '0'
|
185
187
|
requirements: []
|
186
188
|
rubyforge_project: logging
|
187
|
-
rubygems_version: 1.8.
|
189
|
+
rubygems_version: 1.8.11
|
188
190
|
signing_key:
|
189
191
|
specification_version: 3
|
190
192
|
summary: A flexible and extendable logging library for Ruby
|