madvertise-logging 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +5 -0
- data/.yardopts +1 -0
- data/Gemfile +4 -0
- data/README.md +6 -2
- data/lib/madvertise/logging/improved_logger.rb +152 -146
- data/lib/madvertise/logging/multi_logger.rb +13 -3
- data/lib/madvertise/logging/version.rb +2 -1
- data/spec/improved_logger_spec.rb +17 -47
- data/tasks/reek.rake +5 -0
- data/tasks/rspec.rake +5 -18
- data/tasks/yard.rake +5 -0
- metadata +13 -8
data/.travis.yml
ADDED
data/.yardopts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--no-private
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
# Madvertise::Logging
|
2
2
|
|
3
|
-
|
3
|
+
The madvertise-logging gem is a collection of classes for logging related
|
4
|
+
tasks. The main class (`ImprovedLogger`) is an improved version of DaemonKits
|
5
|
+
`AbstractLogger` class including token support, buffer backend and more.
|
6
|
+
|
7
|
+
[![Build Status](https://secure.travis-ci.org/madvertise/logging.png)](http://travis-ci.org/madvertise/logging)
|
4
8
|
|
5
9
|
## Installation
|
6
10
|
|
@@ -18,7 +22,7 @@ Or install it yourself as:
|
|
18
22
|
|
19
23
|
## Usage
|
20
24
|
|
21
|
-
|
25
|
+
Please refer to the [API documentation](http://rubydoc.info/gems/madvertise-logging/frames).
|
22
26
|
|
23
27
|
## Contributing
|
24
28
|
|
@@ -3,12 +3,22 @@ require 'stringio'
|
|
3
3
|
|
4
4
|
module Madvertise
|
5
5
|
module Logging
|
6
|
+
|
7
|
+
##
|
8
|
+
# ImprovedLogger is an enhanced version of DaemonKits AbstractLogger class
|
9
|
+
# with token support, buffer backend and more.
|
10
|
+
#
|
6
11
|
class ImprovedLogger
|
7
12
|
|
13
|
+
# Write a copy of all log messages to STDOUT.
|
8
14
|
attr_accessor :copy_to_stdout
|
9
|
-
|
15
|
+
|
16
|
+
# Program name prefix. Used as ident for syslog backends.
|
10
17
|
attr_accessor :progname
|
11
18
|
|
19
|
+
# Arbitrary token to prefix log messages with.
|
20
|
+
attr_accessor :token
|
21
|
+
|
12
22
|
@severities = {
|
13
23
|
:debug => Logger::DEBUG,
|
14
24
|
:info => Logger::INFO,
|
@@ -21,217 +31,211 @@ module Madvertise
|
|
21
31
|
@silencer = true
|
22
32
|
|
23
33
|
class << self
|
34
|
+
# Hash of Symbol/Fixnum pairs to map Logger levels.
|
24
35
|
attr_reader :severities
|
36
|
+
|
37
|
+
# Enable/disable the silencer on a global basis. Useful for debugging
|
38
|
+
# otherwise silenced code blocks.
|
25
39
|
attr_accessor :silencer
|
26
40
|
end
|
27
41
|
|
28
42
|
def initialize(logfile = nil, progname = nil)
|
29
43
|
@copy_to_stdout = false
|
30
44
|
@progname = progname || File.basename($0)
|
31
|
-
self.logger = logfile
|
45
|
+
self.logger = logfile
|
32
46
|
end
|
33
47
|
|
34
|
-
#
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
yield self
|
40
|
-
ensure
|
41
|
-
self.level = old_level
|
42
|
-
end
|
43
|
-
else
|
44
|
-
yield self
|
45
|
-
end
|
48
|
+
# Get the backend logger.
|
49
|
+
#
|
50
|
+
# @return [Logger] The currently active backend logger object.
|
51
|
+
def logger
|
52
|
+
@logger ||= create_backend
|
46
53
|
end
|
47
54
|
|
48
|
-
|
49
|
-
|
55
|
+
# Set a different backend.
|
56
|
+
#
|
57
|
+
# @param [Symbol, String, Logger] value The new logger backend. Either a
|
58
|
+
# Logger object, a String containing the logfile path or a Symbol to
|
59
|
+
# create a default backend for :syslog or :buffer
|
60
|
+
# @return [Logger] The newly created backend logger object.
|
61
|
+
def logger=(value)
|
62
|
+
@logger.close rescue nil
|
63
|
+
@logfile = value.is_a?(String) ? value : nil
|
64
|
+
@backend = value.is_a?(Symbol) ? value : :logger
|
65
|
+
@logger = value.is_a?(Logger) ? value : create_backend
|
50
66
|
end
|
51
67
|
|
52
|
-
|
53
|
-
|
68
|
+
# Close any connections/descriptors that may have been opened by the
|
69
|
+
# current backend.
|
70
|
+
def close
|
71
|
+
logger.close rescue nil
|
72
|
+
@logger = nil
|
54
73
|
end
|
55
74
|
|
56
|
-
|
57
|
-
|
75
|
+
# Retrieve the current buffer in case this instance is a buffered logger.
|
76
|
+
#
|
77
|
+
# @return [String] Contents of the buffer.
|
78
|
+
def buffer
|
79
|
+
@logfile.string if @backend == :buffer
|
80
|
+
end
|
81
|
+
|
82
|
+
# Get the current logging level.
|
83
|
+
#
|
84
|
+
# @return [Symbol] Current logging level.
|
85
|
+
def level
|
86
|
+
self.class.severities.invert[@logger.level]
|
58
87
|
end
|
59
88
|
|
60
|
-
|
61
|
-
|
89
|
+
# Set the logging level.
|
90
|
+
#
|
91
|
+
# @param [Symbol, Fixnum] level New level as Symbol or Fixnum from Logger class.
|
92
|
+
# @return [Fixnum] New level converted to Fixnum from Logger class.
|
93
|
+
def level=(level)
|
94
|
+
level = level.is_a?(Symbol) ? self.class.severities[level] : level
|
95
|
+
logger.level = level
|
62
96
|
end
|
63
97
|
|
64
|
-
|
65
|
-
|
98
|
+
# Log a debug level message.
|
99
|
+
def debug(msg)
|
100
|
+
add(:debug, msg)
|
66
101
|
end
|
67
102
|
|
68
|
-
|
69
|
-
|
103
|
+
# Log an info level message.
|
104
|
+
def info(msg)
|
105
|
+
add(:info, msg)
|
70
106
|
end
|
71
107
|
|
72
|
-
|
73
|
-
|
108
|
+
# Log a warning level message.
|
109
|
+
def warn(msg)
|
110
|
+
add(:warn, msg)
|
74
111
|
end
|
75
112
|
|
76
|
-
|
77
|
-
|
113
|
+
# Log an error level message.
|
114
|
+
def error(msg)
|
115
|
+
add(:error, msg)
|
78
116
|
end
|
79
117
|
|
118
|
+
# Log a fatal level message.
|
80
119
|
def fatal(msg)
|
81
120
|
add(:fatal, msg)
|
82
121
|
end
|
83
122
|
|
84
|
-
|
85
|
-
self.level == :fatal
|
86
|
-
end
|
87
|
-
|
123
|
+
# Log a message with unknown level.
|
88
124
|
def unknown(msg)
|
89
125
|
add(:unknown, msg)
|
90
126
|
end
|
91
127
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
def exception(
|
97
|
-
if
|
98
|
-
message = "EXCEPTION: #{
|
128
|
+
# Log an exception with error level.
|
129
|
+
#
|
130
|
+
# @param [Exception, String] exc The exception to log. If exc is a
|
131
|
+
# String no backtrace will be generated.
|
132
|
+
def exception(exc)
|
133
|
+
if exc.is_a?(::Exception)
|
134
|
+
message = "EXCEPTION: #{exc.message}: #{clean_trace(exc.backtrace)}"
|
99
135
|
else
|
100
|
-
message =
|
136
|
+
message = exc
|
101
137
|
end
|
102
138
|
add(:error, message, true)
|
103
139
|
end
|
104
140
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
STDOUT.puts(message) if self.copy_to_stdout && self.class.severities[severity] >= self.logger.level
|
112
|
-
end
|
113
|
-
|
114
|
-
def level
|
115
|
-
self.class.severities.invert[@logger.level]
|
116
|
-
end
|
117
|
-
|
118
|
-
def level=(level)
|
119
|
-
level = (Symbol === level ? self.class.severities[level] : level)
|
120
|
-
self.logger.level = level
|
121
|
-
end
|
122
|
-
|
123
|
-
def new_transaction(v)
|
124
|
-
@transaction_token = v
|
125
|
-
end
|
126
|
-
|
127
|
-
def end_transaction
|
128
|
-
@transaction_token = nil
|
129
|
-
end
|
130
|
-
|
131
|
-
def save_transaction(obj)
|
132
|
-
if @transaction_token && obj
|
133
|
-
@transactions ||= {}
|
134
|
-
@transactions[obj.object_id] = @transaction_token
|
141
|
+
# Save the current token and associate it with obj#object_id.
|
142
|
+
def save_token(obj)
|
143
|
+
if @token
|
144
|
+
@tokens ||= {}
|
145
|
+
@tokens[obj.object_id] = @token
|
135
146
|
end
|
136
147
|
end
|
137
148
|
|
138
|
-
|
139
|
-
|
140
|
-
@
|
141
|
-
|
142
|
-
|
143
|
-
def logger
|
144
|
-
@logger ||= create_logger
|
149
|
+
# Restore the token that has been associated with obj#object_id.
|
150
|
+
def restore_token(obj)
|
151
|
+
@tokens ||= {}
|
152
|
+
@token = @tokens.delete(obj.object_id)
|
145
153
|
end
|
146
154
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
155
|
+
# Silence the logger for the duration of the block.
|
156
|
+
def silence(temporary_level = :error)
|
157
|
+
if self.class.silencer
|
158
|
+
begin
|
159
|
+
old_level, self.level = self.level, temporary_level
|
160
|
+
yield self
|
161
|
+
ensure
|
162
|
+
self.level = old_level
|
163
|
+
end
|
156
164
|
else
|
157
|
-
|
158
|
-
@logfile = value
|
159
|
-
@logger = create_logger
|
165
|
+
yield self
|
160
166
|
end
|
161
167
|
end
|
162
168
|
|
169
|
+
# Remove references to the madvertise-logging gem from exception
|
170
|
+
# backtraces.
|
171
|
+
#
|
172
|
+
# @private
|
163
173
|
def clean_trace(trace)
|
164
|
-
trace
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
end
|
169
|
-
|
170
|
-
def close
|
171
|
-
case @backend
|
172
|
-
when :logger
|
173
|
-
self.logger.close
|
174
|
-
@logger = nil
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
def buffer
|
179
|
-
if @backend == :buffer && @buffer
|
180
|
-
@buffer.string
|
174
|
+
trace.map do |line|
|
175
|
+
line.gsub(ROOT, '')
|
176
|
+
end.reject do |line|
|
177
|
+
line =~ /(gems|vendor)\/madvertise-logging/
|
181
178
|
end
|
182
179
|
end
|
183
180
|
|
184
181
|
private
|
185
182
|
|
186
|
-
|
187
|
-
|
188
|
-
|
183
|
+
# Return the first callee outside the madvertise-logging gem. Used in add
|
184
|
+
# to figure out where in the source code a message has been produced.
|
185
|
+
def called_from
|
186
|
+
location = caller.detect('unknown:0') do |line|
|
187
|
+
line.match(/(improved_logger|multi_logger)\.rb/).nil?
|
189
188
|
end
|
190
189
|
|
191
|
-
file, num,
|
190
|
+
file, num, discard = location.split(':')
|
192
191
|
[ File.basename(file), num ].join(':')
|
193
192
|
end
|
194
193
|
|
195
|
-
def
|
194
|
+
def add(severity, message, skip_caller = false)
|
195
|
+
severity = self.class.severities[severity]
|
196
|
+
message = "#{called_from}: #{message}" unless skip_caller
|
197
|
+
message = "[#{@token}] #{message}" if @token
|
198
|
+
|
199
|
+
logger.add(severity) { message }
|
200
|
+
|
201
|
+
STDOUT.puts(message) if self.copy_to_stdout && severity >= @logger.level
|
202
|
+
end
|
203
|
+
|
204
|
+
def create_backend
|
196
205
|
case @backend
|
197
206
|
when :buffer
|
198
|
-
|
207
|
+
create_buffering_backend
|
199
208
|
when :syslog
|
200
|
-
|
209
|
+
create_syslog_backend
|
201
210
|
else
|
202
|
-
|
211
|
+
create_standard_backend
|
203
212
|
end
|
204
213
|
end
|
205
214
|
|
206
|
-
def
|
207
|
-
@
|
208
|
-
|
209
|
-
l.formatter = Formatter.new
|
210
|
-
l.progname = progname
|
211
|
-
end
|
215
|
+
def create_buffering_backend
|
216
|
+
@logfile = StringIO.new
|
217
|
+
create_logger
|
212
218
|
end
|
213
219
|
|
214
|
-
def
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
begin
|
221
|
-
FileUtils.mkdir_p(logdir)
|
222
|
-
rescue
|
223
|
-
STDERR.puts "#{logdir} not writable, using STDERR for logging"
|
224
|
-
@logfile = STDERR
|
225
|
-
end
|
220
|
+
def create_standard_backend
|
221
|
+
begin
|
222
|
+
FileUtils.mkdir_p(File.dirname(@logfile))
|
223
|
+
rescue
|
224
|
+
STDERR.puts "#{@logfile} not writable, using STDERR for logging" if @logfile
|
225
|
+
@logfile = STDERR
|
226
226
|
end
|
227
227
|
|
228
|
-
|
229
|
-
|
230
|
-
|
228
|
+
create_logger
|
229
|
+
end
|
230
|
+
|
231
|
+
def create_logger
|
232
|
+
Logger.new(@logfile).tap do |logger|
|
233
|
+
logger.formatter = Formatter.new
|
234
|
+
logger.progname = progname
|
231
235
|
end
|
232
236
|
end
|
233
237
|
|
234
|
-
def
|
238
|
+
def create_syslog_backend
|
235
239
|
begin
|
236
240
|
require 'syslogger'
|
237
241
|
Syslogger.new(progname, Syslog::LOG_PID, Syslog::LOG_LOCAL1)
|
@@ -241,23 +245,25 @@ module Madvertise
|
|
241
245
|
end
|
242
246
|
end
|
243
247
|
|
248
|
+
##
|
249
|
+
# The Formatter class is responsible for formatting log messages. The
|
250
|
+
# default format is:
|
251
|
+
#
|
252
|
+
# YYYY:MM:DD HH:MM:SS.MS daemon_name(pid) level: message
|
253
|
+
#
|
244
254
|
class Formatter
|
245
255
|
|
246
|
-
# YYYY:MM:DD HH:MM:SS.MS daemon_name(pid) level: message
|
247
256
|
@format = "%s %s(%d) [%s] %s\n"
|
248
257
|
|
249
258
|
class << self
|
259
|
+
# Format string for log messages.
|
250
260
|
attr_accessor :format
|
251
261
|
end
|
252
262
|
|
263
|
+
# @private
|
253
264
|
def call(severity, time, progname, msg)
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
private
|
258
|
-
|
259
|
-
def format_time(time)
|
260
|
-
time.strftime("%Y-%m-%d %H:%M:%S.") + time.usec.to_s
|
265
|
+
time = time.strftime("%Y-%m-%d %H:%M:%S.") + time.usec.to_s
|
266
|
+
self.class.format % [time, progname, $$, severity, msg.to_s]
|
261
267
|
end
|
262
268
|
end
|
263
269
|
end
|
@@ -1,22 +1,32 @@
|
|
1
1
|
module Madvertise
|
2
2
|
module Logging
|
3
|
+
|
4
|
+
##
|
5
|
+
# MultiLogger is a simple class for multiplexing ImprovedLogger objects. It
|
6
|
+
# support attach/detach to send messages to any number of loggers.
|
7
|
+
|
3
8
|
class MultiLogger
|
4
9
|
def initialize(*loggers)
|
5
10
|
@loggers = loggers
|
6
11
|
end
|
7
12
|
|
13
|
+
# Attach an ImprovedLogger object.
|
8
14
|
def attach(logger)
|
9
|
-
logger.
|
15
|
+
logger.token = @loggers.first.token
|
10
16
|
@loggers << logger
|
11
17
|
end
|
12
18
|
|
19
|
+
# Detach an ImprovedLogger object.
|
13
20
|
def detach(logger)
|
14
21
|
@loggers.delete(logger)
|
15
22
|
end
|
16
23
|
|
24
|
+
# Delegate all method calls to all attached loggers.
|
25
|
+
#
|
26
|
+
# @private
|
17
27
|
def method_missing(name, *args)
|
18
|
-
@loggers.each do |
|
19
|
-
|
28
|
+
@loggers.each do |logger|
|
29
|
+
logger.send(name, *args)
|
20
30
|
end
|
21
31
|
end
|
22
32
|
end
|
@@ -39,62 +39,32 @@ describe ImprovedLogger do
|
|
39
39
|
@logfile.should have_received_message(/\[DEBUG\].*Debug test/)
|
40
40
|
end
|
41
41
|
|
42
|
-
it "should return true if debug level is set" do
|
43
|
-
@logger.level = :debug
|
44
|
-
@logger.debug?.should be true
|
45
|
-
end
|
46
|
-
|
47
42
|
it "should log info level messages" do
|
48
43
|
@logger.info("Info test")
|
49
44
|
@logfile.should have_received_message(/\[INFO\].*Info test/)
|
50
45
|
end
|
51
46
|
|
52
|
-
it "should return true if info level is set" do
|
53
|
-
@logger.level = :info
|
54
|
-
@logger.info?.should be true
|
55
|
-
end
|
56
|
-
|
57
47
|
it "should log warn level messages" do
|
58
48
|
@logger.warn("Warn test")
|
59
49
|
@logfile.should have_received_message(/\[WARN\].*Warn test/)
|
60
50
|
end
|
61
51
|
|
62
|
-
it "should return true if warn level is set" do
|
63
|
-
@logger.level = :warn
|
64
|
-
@logger.warn?.should be true
|
65
|
-
end
|
66
|
-
|
67
52
|
it "should log error level messages" do
|
68
53
|
@logger.error("Err test")
|
69
54
|
@logfile.should have_received_message(/\[ERROR\].*Err test/)
|
70
55
|
end
|
71
56
|
|
72
|
-
it "should return true if error level is set" do
|
73
|
-
@logger.level = :error
|
74
|
-
@logger.error?.should be true
|
75
|
-
end
|
76
|
-
|
77
57
|
it "should log fatal level messages" do
|
78
58
|
@logger.fatal("Fatal test")
|
79
59
|
|
80
60
|
@logfile.should have_received_message(/\[FATAL\].*Fatal test/)
|
81
61
|
end
|
82
62
|
|
83
|
-
it "should return true if fatal level is set" do
|
84
|
-
@logger.level = :fatal
|
85
|
-
@logger.fatal?.should be true
|
86
|
-
end
|
87
|
-
|
88
63
|
it "should log unknown level messages" do
|
89
64
|
@logger.unknown("Unknown test")
|
90
65
|
@logfile.should have_received_message(/\[ANY\].*Unknown test/)
|
91
66
|
end
|
92
67
|
|
93
|
-
it "should return true if unknown level is set" do
|
94
|
-
@logger.level = :unknown
|
95
|
-
@logger.unknown?.should be true
|
96
|
-
end
|
97
|
-
|
98
68
|
it "should log the caller file and line number" do
|
99
69
|
f = File.basename(__FILE__)
|
100
70
|
l = __LINE__ + 2
|
@@ -164,40 +134,39 @@ describe ImprovedLogger do
|
|
164
134
|
ImprovedLogger.silencer = true
|
165
135
|
end
|
166
136
|
|
167
|
-
it "should support a
|
137
|
+
it "should support a token" do
|
168
138
|
token = "3d5e27f7-b97c-4adc-b1fd-adf1bd4314e0"
|
169
139
|
|
170
|
-
@logger.
|
171
|
-
@logger.info "This should include a
|
140
|
+
@logger.token = token
|
141
|
+
@logger.info "This should include a token"
|
172
142
|
@logfile.should have_received_message(token)
|
173
143
|
|
174
|
-
@logger.
|
175
|
-
@logger.info "This should not include a
|
144
|
+
@logger.token = nil
|
145
|
+
@logger.info "This should not include a token"
|
176
146
|
@logfile.should_not have_received_message(token)
|
177
147
|
end
|
178
148
|
|
179
|
-
it "should support save/restore on
|
149
|
+
it "should support save/restore on tokens" do
|
180
150
|
token1 = "3d5e27f7-b97c-4adc-b1fd-adf1bd4314e0"
|
181
151
|
token2 = "1bdef605-34b9-4ec7-9a1c-cb58efc8a635"
|
182
152
|
|
183
|
-
|
153
|
+
obj = Object.new
|
184
154
|
|
185
|
-
@logger.
|
186
|
-
@logger.info "This should include
|
155
|
+
@logger.token = token1
|
156
|
+
@logger.info "This should include token1"
|
187
157
|
@logfile.should have_received_message(token1)
|
188
158
|
|
189
|
-
@logger.
|
190
|
-
@logger.
|
191
|
-
@logger.info "This should include
|
159
|
+
@logger.save_token(obj)
|
160
|
+
@logger.token = token2
|
161
|
+
@logger.info "This should include token2"
|
192
162
|
@logfile.should have_received_message(token2)
|
193
|
-
@logger.end_transaction
|
194
163
|
|
195
|
-
@logger.
|
196
|
-
@logger.info "This should include
|
164
|
+
@logger.restore_token(obj)
|
165
|
+
@logger.info "This should include token1"
|
197
166
|
@logfile.should have_received_message(token1)
|
198
167
|
|
199
|
-
@logger.
|
200
|
-
@logger.info "This should not include a
|
168
|
+
@logger.token = nil
|
169
|
+
@logger.info "This should not include a token"
|
201
170
|
@logfile.should_not have_received_message(token1)
|
202
171
|
@logfile.should_not have_received_message(token2)
|
203
172
|
end
|
@@ -224,6 +193,7 @@ describe ImprovedLogger do
|
|
224
193
|
syslogger_paths = $:.select { |p| p.match(/gems\/.*syslogger-/) }
|
225
194
|
$:.replace($: - syslogger_paths)
|
226
195
|
|
196
|
+
STDERR.should_receive(:puts).with(/using STDERR for logging/)
|
227
197
|
STDERR.should_receive(:write).with(/reverting to standard logger/)
|
228
198
|
@logger = ImprovedLogger.new(:syslog)
|
229
199
|
@logger.logger.should be_instance_of(Logger)
|
data/tasks/reek.rake
ADDED
data/tasks/rspec.rake
CHANGED
@@ -1,20 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
rescue LoadError
|
4
|
-
require 'rubygems'
|
5
|
-
require 'rspec'
|
6
|
-
end
|
7
|
-
|
8
|
-
begin
|
9
|
-
require 'rspec/core/rake_task'
|
1
|
+
require 'rspec'
|
2
|
+
require 'rspec/core/rake_task'
|
10
3
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
end
|
15
|
-
rescue LoadError
|
16
|
-
puts <<-EOS
|
17
|
-
To use rspec for testing you must install rspec gem:
|
18
|
-
gem install rspec
|
19
|
-
EOS
|
4
|
+
desc "Run the specs"
|
5
|
+
RSpec::Core::RakeTask.new do |t|
|
6
|
+
t.rspec_opts = ['--options', "spec/spec.opts"]
|
20
7
|
end
|
data/tasks/yard.rake
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: madvertise-logging
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-01-
|
12
|
+
date: 2012-01-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
16
|
-
requirement: &
|
16
|
+
requirement: &14192340 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *14192340
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &14191540 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *14191540
|
36
36
|
description: Advanced logging classes with buffer backend, transactions, multi logger,
|
37
37
|
etc
|
38
38
|
email:
|
@@ -43,6 +43,8 @@ extra_rdoc_files: []
|
|
43
43
|
files:
|
44
44
|
- .gitignore
|
45
45
|
- .rvmrc
|
46
|
+
- .travis.yml
|
47
|
+
- .yardopts
|
46
48
|
- Gemfile
|
47
49
|
- LICENSE
|
48
50
|
- README.md
|
@@ -56,7 +58,9 @@ files:
|
|
56
58
|
- spec/multi_logger_spec.rb
|
57
59
|
- spec/spec.opts
|
58
60
|
- spec/spec_helper.rb
|
61
|
+
- tasks/reek.rake
|
59
62
|
- tasks/rspec.rake
|
63
|
+
- tasks/yard.rake
|
60
64
|
homepage: https://github.com/madvertise/logging
|
61
65
|
licenses: []
|
62
66
|
post_install_message:
|
@@ -71,7 +75,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
71
75
|
version: '0'
|
72
76
|
segments:
|
73
77
|
- 0
|
74
|
-
hash:
|
78
|
+
hash: 3732635707387209248
|
75
79
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
80
|
none: false
|
77
81
|
requirements:
|
@@ -80,7 +84,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
80
84
|
version: '0'
|
81
85
|
segments:
|
82
86
|
- 0
|
83
|
-
hash:
|
87
|
+
hash: 3732635707387209248
|
84
88
|
requirements: []
|
85
89
|
rubyforge_project:
|
86
90
|
rubygems_version: 1.8.10
|
@@ -93,3 +97,4 @@ test_files:
|
|
93
97
|
- spec/multi_logger_spec.rb
|
94
98
|
- spec/spec.opts
|
95
99
|
- spec/spec_helper.rb
|
100
|
+
has_rdoc:
|