rubysl-logger 2.0.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +10 -3
- data/lib/rubysl/logger/logger.rb +121 -78
- data/lib/rubysl/logger/version.rb +1 -1
- data/rubysl-logger.gemspec +4 -1
- metadata +28 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a676ecaf9297d88b65c786ac45d755e611786135
|
4
|
+
data.tar.gz: 7262d8960283a6371c3ec363340a70c51fb9745c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab00e49ed4d0e086b3d339a0e3cdddec8521928262c1aff5ea2a1f756f4acf8821e0f6ff82ba642852f123a443d2597804bd9057fdbf4265a6e7defb2d879070
|
7
|
+
data.tar.gz: 691f3510d81d1fd31cb74a3ab5b4a6799f2abf59565107d1e7cb2a4fe6a65f89b795c964302778ad4c3c44aa87563f8e08f70e7df79b53820bc39298441726ef
|
data/.travis.yml
CHANGED
@@ -1,7 +1,14 @@
|
|
1
1
|
language: ruby
|
2
2
|
env:
|
3
3
|
- RUBYLIB=lib
|
4
|
-
|
4
|
+
- RUBYLIB=
|
5
|
+
script: mspec spec
|
5
6
|
rvm:
|
6
|
-
-
|
7
|
-
- rbx-
|
7
|
+
- 2.0.0
|
8
|
+
- rbx-2.2.1
|
9
|
+
matrix:
|
10
|
+
exclude:
|
11
|
+
- rvm: 2.0.0
|
12
|
+
env: RUBYLIB=lib
|
13
|
+
- rvm: rbx-2.2.1
|
14
|
+
env: RUBYLIB=
|
data/lib/rubysl/logger/logger.rb
CHANGED
@@ -18,18 +18,19 @@ require 'monitor'
|
|
18
18
|
#
|
19
19
|
# The messages have associated levels, such as +INFO+ or +ERROR+ that indicate
|
20
20
|
# their importance. You can then give the Logger a level, and only messages
|
21
|
-
# at that level
|
21
|
+
# at that level or higher will be printed.
|
22
22
|
#
|
23
23
|
# The levels are:
|
24
24
|
#
|
25
|
-
# +
|
26
|
-
# +
|
27
|
-
# +
|
28
|
-
# +
|
29
|
-
# +
|
25
|
+
# +UNKNOWN+:: An unknown message that should always be logged.
|
26
|
+
# +FATAL+:: An unhandleable error that results in a program crash.
|
27
|
+
# +ERROR+:: A handleable error condition.
|
28
|
+
# +WARN+:: A warning.
|
29
|
+
# +INFO+:: Generic (useful) information about system operation.
|
30
|
+
# +DEBUG+:: Low-level information for developers.
|
30
31
|
#
|
31
32
|
# For instance, in a production system, you may have your Logger set to
|
32
|
-
# +INFO+ or even +WARN
|
33
|
+
# +INFO+ or even +WARN+.
|
33
34
|
# When you are developing the system, however, you probably
|
34
35
|
# want to know about the program's internal state, and would set the Logger to
|
35
36
|
# +DEBUG+.
|
@@ -51,24 +52,29 @@ require 'monitor'
|
|
51
52
|
#
|
52
53
|
# === Example
|
53
54
|
#
|
54
|
-
# This creates a
|
55
|
+
# This creates a Logger that outputs to the standard output stream, with a
|
56
|
+
# level of +WARN+:
|
55
57
|
#
|
56
|
-
#
|
57
|
-
# log.level = Logger::WARN
|
58
|
+
# require 'logger'
|
58
59
|
#
|
59
|
-
#
|
60
|
-
#
|
61
|
-
#
|
60
|
+
# logger = Logger.new(STDOUT)
|
61
|
+
# logger.level = Logger::WARN
|
62
|
+
#
|
63
|
+
# logger.debug("Created logger")
|
64
|
+
# logger.info("Program started")
|
65
|
+
# logger.warn("Nothing to do!")
|
66
|
+
#
|
67
|
+
# path = "a_non_existent_file"
|
62
68
|
#
|
63
69
|
# begin
|
64
|
-
# File.
|
70
|
+
# File.foreach(path) do |line|
|
65
71
|
# unless line =~ /^(\w+) = (.*)$/
|
66
|
-
#
|
72
|
+
# logger.error("Line in wrong format: #{line.chomp}")
|
67
73
|
# end
|
68
74
|
# end
|
69
75
|
# rescue => err
|
70
|
-
#
|
71
|
-
#
|
76
|
+
# logger.fatal("Caught exception; exiting")
|
77
|
+
# logger.fatal(err)
|
72
78
|
# end
|
73
79
|
#
|
74
80
|
# Because the Logger's level is set to +WARN+, only the warning, error, and
|
@@ -102,16 +108,16 @@ require 'monitor'
|
|
102
108
|
# 3. Create a logger for the specified file.
|
103
109
|
#
|
104
110
|
# file = File.open('foo.log', File::WRONLY | File::APPEND)
|
105
|
-
# # To create new (and to remove old) logfile, add File::CREAT like
|
106
|
-
# #
|
111
|
+
# # To create new (and to remove old) logfile, add File::CREAT like:
|
112
|
+
# # file = File.open('foo.log', File::WRONLY | File::APPEND | File::CREAT)
|
107
113
|
# logger = Logger.new(file)
|
108
114
|
#
|
109
|
-
# 4. Create a logger which ages logfile once it reaches a certain size.
|
110
|
-
# 10 "old log files
|
115
|
+
# 4. Create a logger which ages the logfile once it reaches a certain size.
|
116
|
+
# Leave 10 "old" log files where each file is about 1,024,000 bytes.
|
111
117
|
#
|
112
118
|
# logger = Logger.new('foo.log', 10, 1024000)
|
113
119
|
#
|
114
|
-
# 5. Create a logger which ages logfile daily/weekly/monthly.
|
120
|
+
# 5. Create a logger which ages the logfile daily/weekly/monthly.
|
115
121
|
#
|
116
122
|
# logger = Logger.new('foo.log', 'daily')
|
117
123
|
# logger = Logger.new('foo.log', 'weekly')
|
@@ -124,13 +130,13 @@ require 'monitor'
|
|
124
130
|
# +debug+. +add+ is used below to log a message of an arbitrary (perhaps
|
125
131
|
# dynamic) level.
|
126
132
|
#
|
127
|
-
# 1. Message in block.
|
133
|
+
# 1. Message in a block.
|
128
134
|
#
|
129
135
|
# logger.fatal { "Argument 'foo' not given." }
|
130
136
|
#
|
131
137
|
# 2. Message as a string.
|
132
138
|
#
|
133
|
-
# logger.error "Argument #{
|
139
|
+
# logger.error "Argument #{@foo} mismatch."
|
134
140
|
#
|
135
141
|
# 3. With progname.
|
136
142
|
#
|
@@ -168,8 +174,7 @@ require 'monitor'
|
|
168
174
|
#
|
169
175
|
# logger.level = Logger::INFO
|
170
176
|
#
|
171
|
-
# DEBUG < INFO < WARN < ERROR < FATAL < UNKNOWN
|
172
|
-
#
|
177
|
+
# # DEBUG < INFO < WARN < ERROR < FATAL < UNKNOWN
|
173
178
|
#
|
174
179
|
# == Format
|
175
180
|
#
|
@@ -177,22 +182,22 @@ require 'monitor'
|
|
177
182
|
# default. The default format and a sample are shown below:
|
178
183
|
#
|
179
184
|
# Log format:
|
180
|
-
# SeverityID, [
|
185
|
+
# SeverityID, [DateTime #pid] SeverityLabel -- ProgName: message
|
181
186
|
#
|
182
187
|
# Log sample:
|
183
|
-
# I, [
|
188
|
+
# I, [1999-03-03T02:34:24.895701 #19074] INFO -- Main: info.
|
184
189
|
#
|
185
|
-
# You may change the date and time format via #datetime_format
|
190
|
+
# You may change the date and time format via #datetime_format=.
|
186
191
|
#
|
187
|
-
# logger.datetime_format =
|
192
|
+
# logger.datetime_format = '%Y-%m-%d %H:%M:%S'
|
188
193
|
# # e.g. "2004-01-03 00:54:26"
|
189
194
|
#
|
190
|
-
# Or, you may change the overall format
|
195
|
+
# Or, you may change the overall format via the #formatter= method.
|
191
196
|
#
|
192
197
|
# logger.formatter = proc do |severity, datetime, progname, msg|
|
193
198
|
# "#{datetime}: #{msg}\n"
|
194
199
|
# end
|
195
|
-
# # e.g. "
|
200
|
+
# # e.g. "2005-09-22 08:51:08 +0900: hello world"
|
196
201
|
#
|
197
202
|
class Logger
|
198
203
|
VERSION = "1.2.7"
|
@@ -213,17 +218,17 @@ class Logger
|
|
213
218
|
|
214
219
|
# Logging severity.
|
215
220
|
module Severity
|
216
|
-
# Low-level information, mostly for developers
|
221
|
+
# Low-level information, mostly for developers.
|
217
222
|
DEBUG = 0
|
218
|
-
#
|
223
|
+
# Generic (useful) information about system operation.
|
219
224
|
INFO = 1
|
220
|
-
#
|
225
|
+
# A warning.
|
221
226
|
WARN = 2
|
222
|
-
#
|
227
|
+
# A handleable error condition.
|
223
228
|
ERROR = 3
|
224
|
-
#
|
229
|
+
# An unhandleable error that results in a program crash.
|
225
230
|
FATAL = 4
|
226
|
-
#
|
231
|
+
# An unknown message that should always be logged.
|
227
232
|
UNKNOWN = 5
|
228
233
|
end
|
229
234
|
include Severity
|
@@ -231,7 +236,7 @@ class Logger
|
|
231
236
|
# Logging severity threshold (e.g. <tt>Logger::INFO</tt>).
|
232
237
|
attr_accessor :level
|
233
238
|
|
234
|
-
#
|
239
|
+
# Program name to include in log messages.
|
235
240
|
attr_accessor :progname
|
236
241
|
|
237
242
|
# Set date-time format.
|
@@ -249,9 +254,9 @@ class Logger
|
|
249
254
|
# Logging formatter, as a +Proc+ that will take four arguments and
|
250
255
|
# return the formatted message. The arguments are:
|
251
256
|
#
|
252
|
-
# +severity+:: The Severity of the log message
|
253
|
-
# +time+:: A Time instance representing when the message was logged
|
254
|
-
# +progname+:: The #progname configured, or passed to the logger method
|
257
|
+
# +severity+:: The Severity of the log message.
|
258
|
+
# +time+:: A Time instance representing when the message was logged.
|
259
|
+
# +progname+:: The #progname configured, or passed to the logger method.
|
255
260
|
# +msg+:: The _Object_ the user passed to the log message; not necessarily a
|
256
261
|
# String.
|
257
262
|
#
|
@@ -284,8 +289,7 @@ class Logger
|
|
284
289
|
def fatal?; @level <= FATAL; end
|
285
290
|
|
286
291
|
#
|
287
|
-
#
|
288
|
-
#
|
292
|
+
# :call-seq:
|
289
293
|
# Logger.new(name, shift_age = 7, shift_size = 1048576)
|
290
294
|
# Logger.new(name, shift_age = 'weekly')
|
291
295
|
#
|
@@ -317,8 +321,7 @@ class Logger
|
|
317
321
|
end
|
318
322
|
|
319
323
|
#
|
320
|
-
#
|
321
|
-
#
|
324
|
+
# :call-seq:
|
322
325
|
# Logger#add(severity, message = nil, progname = nil) { ... }
|
323
326
|
#
|
324
327
|
# === Args
|
@@ -336,10 +339,8 @@ class Logger
|
|
336
339
|
#
|
337
340
|
# === Return
|
338
341
|
#
|
339
|
-
#
|
340
|
-
#
|
341
|
-
# When the given severity is not high enough (for this particular logger), log
|
342
|
-
# no message, and return +true+.
|
342
|
+
# When the given severity is not high enough (for this particular logger),
|
343
|
+
# log no message, and return +true+.
|
343
344
|
#
|
344
345
|
# === Description
|
345
346
|
#
|
@@ -358,7 +359,7 @@ class Logger
|
|
358
359
|
#
|
359
360
|
# * Logfile is not locked.
|
360
361
|
# * Append open does not need to lock file.
|
361
|
-
# * If the OS
|
362
|
+
# * If the OS supports multi I/O, records possibly may be mixed.
|
362
363
|
#
|
363
364
|
def add(severity, message = nil, progname = nil, &block)
|
364
365
|
severity ||= UNKNOWN
|
@@ -402,18 +403,17 @@ class Logger
|
|
402
403
|
#
|
403
404
|
# :call-seq:
|
404
405
|
# info(message)
|
405
|
-
# info(progname
|
406
|
+
# info(progname, &block)
|
406
407
|
#
|
407
408
|
# Log an +INFO+ message.
|
408
409
|
#
|
409
|
-
# +message+::
|
410
|
-
# +progname+::
|
411
|
-
#
|
412
|
-
#
|
413
|
-
#
|
414
|
-
#
|
415
|
-
#
|
416
|
-
# only called when the logger is configured to show them.
|
410
|
+
# +message+:: The message to log; does not need to be a String.
|
411
|
+
# +progname+:: In the block form, this is the #progname to use in the
|
412
|
+
# log message. The default can be set with #progname=.
|
413
|
+
# +block+:: Evaluates to the message to log. This is not evaluated unless
|
414
|
+
# the logger's level is sufficient to log the message. This
|
415
|
+
# allows you to create potentially expensive logging messages that
|
416
|
+
# are only called when the logger is configured to show them.
|
417
417
|
#
|
418
418
|
# === Examples
|
419
419
|
#
|
@@ -463,7 +463,7 @@ class Logger
|
|
463
463
|
|
464
464
|
#
|
465
465
|
# Log an +UNKNOWN+ message. This will be printed no matter what the logger's
|
466
|
-
# level.
|
466
|
+
# level is.
|
467
467
|
#
|
468
468
|
# See #info for more information.
|
469
469
|
#
|
@@ -480,7 +480,7 @@ class Logger
|
|
480
480
|
|
481
481
|
private
|
482
482
|
|
483
|
-
# Severity label for logging
|
483
|
+
# Severity label for logging (max 5 chars).
|
484
484
|
SEV_LABEL = %w(DEBUG INFO WARN ERROR FATAL ANY)
|
485
485
|
|
486
486
|
def format_severity(severity)
|
@@ -492,7 +492,7 @@ private
|
|
492
492
|
end
|
493
493
|
|
494
494
|
|
495
|
-
# Default formatter for log messages
|
495
|
+
# Default formatter for log messages.
|
496
496
|
class Formatter
|
497
497
|
Format = "%s, [%s#%d] %5s -- %s: %s\n"
|
498
498
|
|
@@ -588,24 +588,32 @@ private
|
|
588
588
|
private
|
589
589
|
|
590
590
|
def open_logfile(filename)
|
591
|
-
|
591
|
+
begin
|
592
592
|
open(filename, (File::WRONLY | File::APPEND))
|
593
|
-
|
593
|
+
rescue Errno::ENOENT
|
594
594
|
create_logfile(filename)
|
595
595
|
end
|
596
596
|
end
|
597
597
|
|
598
598
|
def create_logfile(filename)
|
599
|
-
|
600
|
-
|
601
|
-
|
599
|
+
begin
|
600
|
+
logdev = open(filename, (File::WRONLY | File::APPEND | File::CREAT | File::EXCL))
|
601
|
+
logdev.flock(File::LOCK_EX)
|
602
|
+
logdev.sync = true
|
603
|
+
add_log_header(logdev)
|
604
|
+
logdev.flock(File::LOCK_UN)
|
605
|
+
rescue Errno::EEXIST
|
606
|
+
# file is created by another process
|
607
|
+
logdev = open_logfile(filename)
|
608
|
+
logdev.sync = true
|
609
|
+
end
|
602
610
|
logdev
|
603
611
|
end
|
604
612
|
|
605
613
|
def add_log_header(file)
|
606
614
|
file.write(
|
607
615
|
"# Logfile created on %s by %s\n" % [Time.now.to_s, Logger::ProgName]
|
608
|
-
)
|
616
|
+
) if file.size == 0
|
609
617
|
end
|
610
618
|
|
611
619
|
SiD = 24 * 60 * 60
|
@@ -614,17 +622,53 @@ private
|
|
614
622
|
if @shift_age.is_a?(Integer)
|
615
623
|
# Note: always returns false if '0'.
|
616
624
|
if @filename && (@shift_age > 0) && (@dev.stat.size > @shift_size)
|
617
|
-
shift_log_age
|
625
|
+
lock_shift_log { shift_log_age }
|
618
626
|
end
|
619
627
|
else
|
620
628
|
now = Time.now
|
621
629
|
period_end = previous_period_end(now)
|
622
630
|
if @dev.stat.mtime <= period_end
|
623
|
-
shift_log_period(period_end)
|
631
|
+
lock_shift_log { shift_log_period(period_end) }
|
624
632
|
end
|
625
633
|
end
|
626
634
|
end
|
627
635
|
|
636
|
+
if /mswin|mingw/ =~ RUBY_PLATFORM
|
637
|
+
def lock_shift_log
|
638
|
+
yield
|
639
|
+
end
|
640
|
+
else
|
641
|
+
def lock_shift_log
|
642
|
+
retry_limit = 8
|
643
|
+
retry_sleep = 0.1
|
644
|
+
begin
|
645
|
+
File.open(@filename, File::WRONLY | File::APPEND) do |lock|
|
646
|
+
lock.flock(File::LOCK_EX) # inter-process locking. will be unlocked at closing file
|
647
|
+
if File.identical?(@filename, lock) and File.identical?(lock, @dev)
|
648
|
+
yield # log shifting
|
649
|
+
else
|
650
|
+
# log shifted by another process (i-node before locking and i-node after locking are different)
|
651
|
+
@dev.close rescue nil
|
652
|
+
@dev = open_logfile(@filename)
|
653
|
+
@dev.sync = true
|
654
|
+
end
|
655
|
+
end
|
656
|
+
rescue Errno::ENOENT
|
657
|
+
# @filename file would not exist right after #rename and before #create_logfile
|
658
|
+
if retry_limit <= 0
|
659
|
+
warn("log rotation inter-process lock failed. #{$!}")
|
660
|
+
else
|
661
|
+
sleep retry_sleep
|
662
|
+
retry_limit -= 1
|
663
|
+
retry_sleep *= 2
|
664
|
+
retry
|
665
|
+
end
|
666
|
+
end
|
667
|
+
rescue
|
668
|
+
warn("log rotation inter-process lock failed. #{$!}")
|
669
|
+
end
|
670
|
+
end
|
671
|
+
|
628
672
|
def shift_log_age
|
629
673
|
(@shift_age-3).downto(0) do |i|
|
630
674
|
if FileTest.exist?("#{@filename}.#{i}")
|
@@ -678,17 +722,17 @@ private
|
|
678
722
|
#
|
679
723
|
# == Description
|
680
724
|
#
|
681
|
-
# Application
|
725
|
+
# Logger::Application --- Add logging support to your application.
|
682
726
|
#
|
683
727
|
# == Usage
|
684
728
|
#
|
685
729
|
# 1. Define your application class as a sub-class of this class.
|
686
|
-
# 2. Override
|
687
|
-
# 3. Instantiate it and invoke
|
730
|
+
# 2. Override the +run+ method in your class to do many things.
|
731
|
+
# 3. Instantiate it and invoke #start.
|
688
732
|
#
|
689
733
|
# == Example
|
690
734
|
#
|
691
|
-
# class FooApp < Application
|
735
|
+
# class FooApp < Logger::Application
|
692
736
|
# def initialize(foo_app, application_specific, arguments)
|
693
737
|
# super('FooApp') # Name of the application.
|
694
738
|
# end
|
@@ -711,9 +755,8 @@ private
|
|
711
755
|
attr_reader :appname
|
712
756
|
|
713
757
|
#
|
714
|
-
#
|
715
|
-
#
|
716
|
-
# Application.new(appname = '')
|
758
|
+
# :call-seq:
|
759
|
+
# Logger::Application.new(appname = '')
|
717
760
|
#
|
718
761
|
# == Args
|
719
762
|
#
|
data/rubysl-logger.gemspec
CHANGED
@@ -16,7 +16,10 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
17
17
|
spec.require_paths = ["lib"]
|
18
18
|
|
19
|
+
spec.required_ruby_version = "~> 2.0"
|
20
|
+
|
19
21
|
spec.add_development_dependency "bundler", "~> 1.3"
|
20
22
|
spec.add_development_dependency "rake", "~> 10.0"
|
21
23
|
spec.add_development_dependency "mspec", "~> 1.5"
|
22
|
-
|
24
|
+
spec.add_development_dependency "rubysl-prettyprint", "~> 2.0"
|
25
|
+
end
|
metadata
CHANGED
@@ -1,57 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubysl-logger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Shirai
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-11-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.3'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '10.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: mspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '1.5'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.5'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubysl-prettyprint
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.0'
|
55
69
|
description: Ruby standard library logger.
|
56
70
|
email:
|
57
71
|
- brixen@gmail.com
|
@@ -59,8 +73,8 @@ executables: []
|
|
59
73
|
extensions: []
|
60
74
|
extra_rdoc_files: []
|
61
75
|
files:
|
62
|
-
- .gitignore
|
63
|
-
- .travis.yml
|
76
|
+
- ".gitignore"
|
77
|
+
- ".travis.yml"
|
64
78
|
- Gemfile
|
65
79
|
- LICENSE
|
66
80
|
- README.md
|
@@ -100,17 +114,17 @@ require_paths:
|
|
100
114
|
- lib
|
101
115
|
required_ruby_version: !ruby/object:Gem::Requirement
|
102
116
|
requirements:
|
103
|
-
- -
|
117
|
+
- - "~>"
|
104
118
|
- !ruby/object:Gem::Version
|
105
|
-
version: '0'
|
119
|
+
version: '2.0'
|
106
120
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
121
|
requirements:
|
108
|
-
- -
|
122
|
+
- - ">="
|
109
123
|
- !ruby/object:Gem::Version
|
110
124
|
version: '0'
|
111
125
|
requirements: []
|
112
126
|
rubyforge_project:
|
113
|
-
rubygems_version: 2.
|
127
|
+
rubygems_version: 2.2.2
|
114
128
|
signing_key:
|
115
129
|
specification_version: 4
|
116
130
|
summary: Ruby standard library logger.
|