logger 1.4.0 → 1.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8ac30b81e7461bb8da11d63f68d4981b0f058960d6001319c8709c98b05b1dfa
4
- data.tar.gz: 25dfc74c49ea696330c6e2c435a27a0b6933ecd65cf4ed9ea2ede8accde35606
3
+ metadata.gz: 86ff5c7f2a189b07730b1fbe6287938cf7501889ee62bd89d8de6d02902f1bee
4
+ data.tar.gz: 62343e3ea1b0dbd6cdb94ff67721f1f86e54876bd6cd0265b112181d60fd1125
5
5
  SHA512:
6
- metadata.gz: 1d724998e973037c4c5baaae8c8edc965129533a72f70b0551cfed8c871e27d6ec11e780636b329fb9ba9636e22da0cb0cfe0e76bf0fe73fe6cbbdc575068c0b
7
- data.tar.gz: aaf0393b43f86dc1cada4f57e5faf64159f3d1cf52a93e97077b64721bd6287aaea7f55a7377ecf74689ed68ecda65c58440b27fbf1404f7ffd087fd80f0381a
6
+ metadata.gz: 302bbc40320bd744a40924ce6837499d2d9460ebab7745805352cb86d1348737a350bcb94918474cc0cf517b04b6b374eddcfc6a9d142d92943d99ec746df335
7
+ data.tar.gz: c4d057679ca2aed3e4e57424eacb0167ebb34fcb135bb7b9961a7f2e4b0bfdb33a6f902cd5255acaee7d04adb10d9d5e7035a3784aa0b3e9bc19b5fdd2d528e7
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ # not used after 1.2.7. just for compat.
4
+ class Logger
5
+ class Error < RuntimeError # :nodoc:
6
+ end
7
+ class ShiftingError < Error # :nodoc:
8
+ end
9
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Logger
4
+ # Default formatter for log messages.
5
+ class Formatter
6
+ Format = "%s, [%s#%d] %5s -- %s: %s\n"
7
+
8
+ attr_accessor :datetime_format
9
+
10
+ def initialize
11
+ @datetime_format = nil
12
+ end
13
+
14
+ def call(severity, time, progname, msg)
15
+ Format % [severity[0..0], format_datetime(time), Process.pid, severity, progname,
16
+ msg2str(msg)]
17
+ end
18
+
19
+ private
20
+
21
+ def format_datetime(time)
22
+ time.strftime(@datetime_format || "%Y-%m-%dT%H:%M:%S.%6N ")
23
+ end
24
+
25
+ def msg2str(msg)
26
+ case msg
27
+ when ::String
28
+ msg
29
+ when ::Exception
30
+ "#{ msg.message } (#{ msg.class })\n#{ msg.backtrace.join("\n") if msg.backtrace }"
31
+ else
32
+ msg.inspect
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,205 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'period'
4
+
5
+ class Logger
6
+ # Device used for logging messages.
7
+ class LogDevice
8
+ include Period
9
+
10
+ attr_reader :dev
11
+ attr_reader :filename
12
+ include MonitorMixin
13
+
14
+ def initialize(log = nil, shift_age: nil, shift_size: nil, shift_period_suffix: nil, binmode: false)
15
+ @dev = @filename = @shift_age = @shift_size = @shift_period_suffix = nil
16
+ @binmode = binmode
17
+ mon_initialize
18
+ set_dev(log)
19
+ if @filename
20
+ @shift_age = shift_age || 7
21
+ @shift_size = shift_size || 1048576
22
+ @shift_period_suffix = shift_period_suffix || '%Y%m%d'
23
+
24
+ unless @shift_age.is_a?(Integer)
25
+ base_time = @dev.respond_to?(:stat) ? @dev.stat.mtime : Time.now
26
+ @next_rotate_time = next_rotate_time(base_time, @shift_age)
27
+ end
28
+ end
29
+ end
30
+
31
+ def write(message)
32
+ begin
33
+ synchronize do
34
+ if @shift_age and @dev.respond_to?(:stat)
35
+ begin
36
+ check_shift_log
37
+ rescue
38
+ warn("log shifting failed. #{$!}")
39
+ end
40
+ end
41
+ begin
42
+ @dev.write(message)
43
+ rescue
44
+ warn("log writing failed. #{$!}")
45
+ end
46
+ end
47
+ rescue Exception => ignored
48
+ warn("log writing failed. #{ignored}")
49
+ end
50
+ end
51
+
52
+ def close
53
+ begin
54
+ synchronize do
55
+ @dev.close rescue nil
56
+ end
57
+ rescue Exception
58
+ @dev.close rescue nil
59
+ end
60
+ end
61
+
62
+ def reopen(log = nil)
63
+ # reopen the same filename if no argument, do nothing for IO
64
+ log ||= @filename if @filename
65
+ if log
66
+ synchronize do
67
+ if @filename and @dev
68
+ @dev.close rescue nil # close only file opened by Logger
69
+ @filename = nil
70
+ end
71
+ set_dev(log)
72
+ end
73
+ end
74
+ self
75
+ end
76
+
77
+ private
78
+
79
+ def set_dev(log)
80
+ if log.respond_to?(:write) and log.respond_to?(:close)
81
+ @dev = log
82
+ if log.respond_to?(:path)
83
+ @filename = log.path
84
+ end
85
+ else
86
+ @dev = open_logfile(log)
87
+ @dev.sync = true
88
+ @dev.binmode if @binmode
89
+ @filename = log
90
+ end
91
+ end
92
+
93
+ def open_logfile(filename)
94
+ begin
95
+ File.open(filename, (File::WRONLY | File::APPEND))
96
+ rescue Errno::ENOENT
97
+ create_logfile(filename)
98
+ end
99
+ end
100
+
101
+ def create_logfile(filename)
102
+ begin
103
+ logdev = File.open(filename, (File::WRONLY | File::APPEND | File::CREAT | File::EXCL))
104
+ logdev.flock(File::LOCK_EX)
105
+ logdev.sync = true
106
+ logdev.binmode if @binmode
107
+ add_log_header(logdev)
108
+ logdev.flock(File::LOCK_UN)
109
+ rescue Errno::EEXIST
110
+ # file is created by another process
111
+ logdev = open_logfile(filename)
112
+ logdev.sync = true
113
+ end
114
+ logdev
115
+ end
116
+
117
+ def add_log_header(file)
118
+ file.write(
119
+ "# Logfile created on %s by %s\n" % [Time.now.to_s, Logger::ProgName]
120
+ ) if file.size == 0
121
+ end
122
+
123
+ def check_shift_log
124
+ if @shift_age.is_a?(Integer)
125
+ # Note: always returns false if '0'.
126
+ if @filename && (@shift_age > 0) && (@dev.stat.size > @shift_size)
127
+ lock_shift_log { shift_log_age }
128
+ end
129
+ else
130
+ now = Time.now
131
+ if now >= @next_rotate_time
132
+ @next_rotate_time = next_rotate_time(now, @shift_age)
133
+ lock_shift_log { shift_log_period(previous_period_end(now, @shift_age)) }
134
+ end
135
+ end
136
+ end
137
+
138
+ if /mswin|mingw|cygwin/ =~ RUBY_PLATFORM
139
+ def lock_shift_log
140
+ yield
141
+ end
142
+ else
143
+ def lock_shift_log
144
+ retry_limit = 8
145
+ retry_sleep = 0.1
146
+ begin
147
+ File.open(@filename, File::WRONLY | File::APPEND) do |lock|
148
+ lock.flock(File::LOCK_EX) # inter-process locking. will be unlocked at closing file
149
+ if File.identical?(@filename, lock) and File.identical?(lock, @dev)
150
+ yield # log shifting
151
+ else
152
+ # log shifted by another process (i-node before locking and i-node after locking are different)
153
+ @dev.close rescue nil
154
+ @dev = open_logfile(@filename)
155
+ @dev.sync = true
156
+ end
157
+ end
158
+ rescue Errno::ENOENT
159
+ # @filename file would not exist right after #rename and before #create_logfile
160
+ if retry_limit <= 0
161
+ warn("log rotation inter-process lock failed. #{$!}")
162
+ else
163
+ sleep retry_sleep
164
+ retry_limit -= 1
165
+ retry_sleep *= 2
166
+ retry
167
+ end
168
+ end
169
+ rescue
170
+ warn("log rotation inter-process lock failed. #{$!}")
171
+ end
172
+ end
173
+
174
+ def shift_log_age
175
+ (@shift_age-3).downto(0) do |i|
176
+ if FileTest.exist?("#{@filename}.#{i}")
177
+ File.rename("#{@filename}.#{i}", "#{@filename}.#{i+1}")
178
+ end
179
+ end
180
+ @dev.close rescue nil
181
+ File.rename("#{@filename}", "#{@filename}.0")
182
+ @dev = create_logfile(@filename)
183
+ return true
184
+ end
185
+
186
+ def shift_log_period(period_end)
187
+ suffix = period_end.strftime(@shift_period_suffix)
188
+ age_file = "#{@filename}.#{suffix}"
189
+ if FileTest.exist?(age_file)
190
+ # try to avoid filename crash caused by Timestamp change.
191
+ idx = 0
192
+ # .99 can be overridden; avoid too much file search with 'loop do'
193
+ while idx < 100
194
+ idx += 1
195
+ age_file = "#{@filename}.#{suffix}.#{idx}"
196
+ break unless FileTest.exist?(age_file)
197
+ end
198
+ end
199
+ @dev.close rescue nil
200
+ File.rename("#{@filename}", age_file)
201
+ @dev = create_logfile(@filename)
202
+ return true
203
+ end
204
+ end
205
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Logger
4
+ module Period
5
+ module_function
6
+
7
+ SiD = 24 * 60 * 60
8
+
9
+ def next_rotate_time(now, shift_age)
10
+ case shift_age
11
+ when 'daily'
12
+ t = Time.mktime(now.year, now.month, now.mday) + SiD
13
+ when 'weekly'
14
+ t = Time.mktime(now.year, now.month, now.mday) + SiD * (7 - now.wday)
15
+ when 'monthly'
16
+ t = Time.mktime(now.year, now.month, 1) + SiD * 32
17
+ return Time.mktime(t.year, t.month, 1)
18
+ when 'now', 'everytime'
19
+ return now
20
+ else
21
+ raise ArgumentError, "invalid :shift_age #{shift_age.inspect}, should be daily, weekly, monthly, or everytime"
22
+ end
23
+ if t.hour.nonzero? or t.min.nonzero? or t.sec.nonzero?
24
+ hour = t.hour
25
+ t = Time.mktime(t.year, t.month, t.mday)
26
+ t += SiD if hour > 12
27
+ end
28
+ t
29
+ end
30
+
31
+ def previous_period_end(now, shift_age)
32
+ case shift_age
33
+ when 'daily'
34
+ t = Time.mktime(now.year, now.month, now.mday) - SiD / 2
35
+ when 'weekly'
36
+ t = Time.mktime(now.year, now.month, now.mday) - (SiD * now.wday + SiD / 2)
37
+ when 'monthly'
38
+ t = Time.mktime(now.year, now.month, 1) - SiD / 2
39
+ when 'now', 'everytime'
40
+ return now
41
+ else
42
+ raise ArgumentError, "invalid :shift_age #{shift_age.inspect}, should be daily, weekly, monthly, or everytime"
43
+ end
44
+ Time.mktime(t.year, t.month, t.mday, 23, 59, 59)
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Logger
4
+ # Logging severity.
5
+ module Severity
6
+ # Low-level information, mostly for developers.
7
+ DEBUG = 0
8
+ # Generic (useful) information about system operation.
9
+ INFO = 1
10
+ # A warning.
11
+ WARN = 2
12
+ # A handleable error condition.
13
+ ERROR = 3
14
+ # An unhandleable error that results in a program crash.
15
+ FATAL = 4
16
+ # An unknown message that should always be logged.
17
+ UNKNOWN = 5
18
+ end
19
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Logger
4
+ VERSION = "1.4.4"
5
+ end
data/lib/logger.rb CHANGED
@@ -302,37 +302,37 @@ class Logger
302
302
  alias sev_threshold level
303
303
  alias sev_threshold= level=
304
304
 
305
- # Returns +true+ iff the current severity level allows for the printing of
305
+ # Returns +true+ if and only if the current severity level allows for the printing of
306
306
  # +DEBUG+ messages.
307
- def debug?; @level <= DEBUG; end
307
+ def debug?; level <= DEBUG; end
308
308
 
309
309
  # Sets the severity to DEBUG.
310
310
  def debug!; self.level = DEBUG; end
311
311
 
312
- # Returns +true+ iff the current severity level allows for the printing of
312
+ # Returns +true+ if and only if the current severity level allows for the printing of
313
313
  # +INFO+ messages.
314
- def info?; @level <= INFO; end
314
+ def info?; level <= INFO; end
315
315
 
316
316
  # Sets the severity to INFO.
317
317
  def info!; self.level = INFO; end
318
318
 
319
- # Returns +true+ iff the current severity level allows for the printing of
319
+ # Returns +true+ if and only if the current severity level allows for the printing of
320
320
  # +WARN+ messages.
321
- def warn?; @level <= WARN; end
321
+ def warn?; level <= WARN; end
322
322
 
323
323
  # Sets the severity to WARN.
324
324
  def warn!; self.level = WARN; end
325
325
 
326
- # Returns +true+ iff the current severity level allows for the printing of
326
+ # Returns +true+ if and only if the current severity level allows for the printing of
327
327
  # +ERROR+ messages.
328
- def error?; @level <= ERROR; end
328
+ def error?; level <= ERROR; end
329
329
 
330
330
  # Sets the severity to ERROR.
331
331
  def error!; self.level = ERROR; end
332
332
 
333
- # Returns +true+ iff the current severity level allows for the printing of
333
+ # Returns +true+ if and only if the current severity level allows for the printing of
334
334
  # +FATAL+ messages.
335
- def fatal?; @level <= FATAL; end
335
+ def fatal?; level <= FATAL; end
336
336
 
337
337
  # Sets the severity to FATAL.
338
338
  def fatal!; self.level = FATAL; end
@@ -349,14 +349,16 @@ class Logger
349
349
  # === Args
350
350
  #
351
351
  # +logdev+::
352
- # The log device. This is a filename (String) or IO object (typically
353
- # +STDOUT+, +STDERR+, or an open file).
352
+ # The log device. This is a filename (String), IO object (typically
353
+ # +STDOUT+, +STDERR+, or an open file), +nil+ (it writes nothing) or
354
+ # +File::NULL+ (same as +nil+).
354
355
  # +shift_age+::
355
356
  # Number of old log files to keep, *or* frequency of rotation (+daily+,
356
- # +weekly+ or +monthly+). Default value is 0.
357
+ # +weekly+ or +monthly+). Default value is 0, which disables log file
358
+ # rotation.
357
359
  # +shift_size+::
358
- # Maximum logfile size in bytes (only applies when +shift_age+ is a number).
359
- # Defaults to +1048576+ (1MB).
360
+ # Maximum logfile size in bytes (only applies when +shift_age+ is a positive
361
+ # Integer). Defaults to +1048576+ (1MB).
360
362
  # +level+::
361
363
  # Logging severity threshold. Default values is Logger::DEBUG.
362
364
  # +progname+::
@@ -384,7 +386,7 @@ class Logger
384
386
  self.datetime_format = datetime_format
385
387
  self.formatter = formatter
386
388
  @logdev = nil
387
- if logdev
389
+ if logdev && logdev != File::NULL
388
390
  @logdev = LogDevice.new(logdev, shift_age: shift_age,
389
391
  shift_size: shift_size,
390
392
  shift_period_suffix: shift_period_suffix,
@@ -409,7 +411,7 @@ class Logger
409
411
  # Reopen a log device.
410
412
  #
411
413
  def reopen(logdev = nil)
412
- @logdev.reopen(logdev)
414
+ @logdev&.reopen(logdev)
413
415
  self
414
416
  end
415
417
 
@@ -456,7 +458,7 @@ class Logger
456
458
  #
457
459
  def add(severity, message = nil, progname = nil)
458
460
  severity ||= UNKNOWN
459
- if @logdev.nil? or severity < @level
461
+ if @logdev.nil? or severity < level
460
462
  return true
461
463
  end
462
464
  if progname.nil?
data/logger.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  begin
2
2
  require_relative "lib/logger/version"
3
3
  rescue LoadError # Fallback to load version file in ruby core repository
4
- require_relative "logger/version"
4
+ require_relative "version"
5
5
  end
6
6
 
7
7
  Gem::Specification.new do |spec|
@@ -13,17 +13,15 @@ Gem::Specification.new do |spec|
13
13
  spec.summary = %q{Provides a simple logging utility for outputting messages.}
14
14
  spec.description = %q{Provides a simple logging utility for outputting messages.}
15
15
  spec.homepage = "https://github.com/ruby/logger"
16
- spec.license = "BSD-2-Clause"
16
+ spec.licenses = ["Ruby", "BSD-2-Clause"]
17
17
 
18
- spec.files = ["Gemfile", "LICENSE.txt", "README.md", "Rakefile", "lib/logger.rb", "logger.gemspec"]
19
- spec.bindir = "exe"
20
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
18
+ spec.files = Dir.glob("lib/**/*.rb") + ["logger.gemspec"]
21
19
  spec.require_paths = ["lib"]
22
20
 
23
21
  spec.required_ruby_version = ">= 2.3.0"
24
22
 
25
23
  spec.add_development_dependency "bundler", ">= 0"
26
- spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_development_dependency "rake", ">= 12.3.3"
27
25
  spec.add_development_dependency "test-unit"
28
26
  spec.add_development_dependency "rdoc"
29
27
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Naotoshi Seo
8
8
  - SHIBATA Hiroshi
9
- autorequire:
10
- bindir: exe
9
+ autorequire:
10
+ bindir: bin
11
11
  cert_chain: []
12
- date: 2019-08-19 00:00:00.000000000 Z
12
+ date: 2021-10-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -29,16 +29,16 @@ dependencies:
29
29
  name: rake
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - "~>"
32
+ - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: '10.0'
34
+ version: 12.3.3
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - "~>"
39
+ - - ">="
40
40
  - !ruby/object:Gem::Version
41
- version: '10.0'
41
+ version: 12.3.3
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: test-unit
44
44
  requirement: !ruby/object:Gem::Requirement
@@ -75,17 +75,20 @@ executables: []
75
75
  extensions: []
76
76
  extra_rdoc_files: []
77
77
  files:
78
- - Gemfile
79
- - LICENSE.txt
80
- - README.md
81
- - Rakefile
82
78
  - lib/logger.rb
79
+ - lib/logger/errors.rb
80
+ - lib/logger/formatter.rb
81
+ - lib/logger/log_device.rb
82
+ - lib/logger/period.rb
83
+ - lib/logger/severity.rb
84
+ - lib/logger/version.rb
83
85
  - logger.gemspec
84
86
  homepage: https://github.com/ruby/logger
85
87
  licenses:
88
+ - Ruby
86
89
  - BSD-2-Clause
87
90
  metadata: {}
88
- post_install_message:
91
+ post_install_message:
89
92
  rdoc_options: []
90
93
  require_paths:
91
94
  - lib
@@ -100,8 +103,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
100
103
  - !ruby/object:Gem::Version
101
104
  version: '0'
102
105
  requirements: []
103
- rubygems_version: 3.0.3
104
- signing_key:
106
+ rubygems_version: 3.3.0.dev
107
+ signing_key:
105
108
  specification_version: 4
106
109
  summary: Provides a simple logging utility for outputting messages.
107
110
  test_files: []
data/Gemfile DELETED
@@ -1,5 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
-
5
- gemspec
data/LICENSE.txt DELETED
@@ -1,22 +0,0 @@
1
- Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved.
2
-
3
- Redistribution and use in source and binary forms, with or without
4
- modification, are permitted provided that the following conditions
5
- are met:
6
- 1. Redistributions of source code must retain the above copyright
7
- notice, this list of conditions and the following disclaimer.
8
- 2. Redistributions in binary form must reproduce the above copyright
9
- notice, this list of conditions and the following disclaimer in the
10
- documentation and/or other materials provided with the distribution.
11
-
12
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
13
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
14
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
15
- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
16
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
17
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
18
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
19
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
20
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
21
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
22
- SUCH DAMAGE.
data/README.md DELETED
@@ -1,104 +0,0 @@
1
- # Logger
2
-
3
- [![Build Status](https://travis-ci.com/ruby/logger.svg?branch=master)](https://travis-ci.com/ruby/logger)
4
-
5
- Logger is a simple but powerful logging utility to output messages in your Ruby program.
6
-
7
- Logger has the following features:
8
-
9
- * Print messages to different levels such as `info` and `error`
10
- * Auto-rolling of log files
11
- * Setting the format of log messages
12
- * Specifying a program name in conjunction with the message
13
-
14
- ## Installation
15
-
16
- Add this line to your application's Gemfile:
17
-
18
- ```ruby
19
- gem 'logger'
20
- ```
21
-
22
- And then execute:
23
-
24
- $ bundle
25
-
26
- Or install it yourself as:
27
-
28
- $ gem install logger
29
-
30
- ## Usage
31
-
32
- ### Simple Example
33
-
34
- require 'logger'
35
-
36
- # Create a Logger that prints to STDOUT
37
- log = Logger.new(STDOUT)
38
- log.debug("Created Logger")
39
-
40
- log.info("Program finished")
41
-
42
- # Create a Logger that prints to STDERR
43
- error_log = Logger.new(STDERR)
44
- error_log = Logger.error("fatal error")
45
-
46
- ## Development
47
-
48
- After checking out the repo, run the following to install dependencies.
49
-
50
- ```
51
- $ bin/setup
52
- ```
53
-
54
- Then, run the tests as:
55
-
56
- ```
57
- $ rake test
58
- ```
59
-
60
- To install this gem onto your local machine, run
61
-
62
- ```
63
- $ rake install
64
- ```
65
-
66
- To release a new version, update the version number in `lib/logger/version.rb`, and then run
67
-
68
- ```
69
- $ rake release
70
- ```
71
-
72
- which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
73
-
74
- ## Advanced Development
75
-
76
- ### Run tests of a specific file
77
-
78
- ```
79
- $ ruby test/logger/test_logger.rb
80
- ```
81
-
82
- ### Run tests filtering test methods by a name
83
-
84
- `--name` option is available as:
85
-
86
- ```
87
- $ ruby test/logger/test_logger.rb --name test_lshift
88
- ```
89
-
90
- ### Publish documents to GitHub Pages
91
-
92
- ```
93
- $ rake gh-pages
94
- ```
95
-
96
- Then, git commit and push the generated HTMLs onto `gh-pages` branch.
97
-
98
- ## Contributing
99
-
100
- Bug reports and pull requests are welcome on GitHub at https://github.com/ruby/logger.
101
-
102
- ## License
103
-
104
- The gem is available as open source under the terms of the [BSD-2-Clause](LICENSE.txt).
data/Rakefile DELETED
@@ -1,28 +0,0 @@
1
- begin
2
- require "bundler/gem_tasks"
3
- rescue LoadError
4
- end
5
-
6
- require "rake/testtask"
7
- Rake::TestTask.new(:test) do |t|
8
- t.test_files = FileList["test/**/test_*.rb"]
9
- end
10
-
11
- require "rdoc/task"
12
- RDoc::Task.new do |doc|
13
- doc.main = "README.md"
14
- doc.title = "Logger -- Ruby Standard Logger"
15
- doc.rdoc_files = FileList.new %w[README.md lib LICENSE.txt]
16
- doc.rdoc_dir = "html"
17
- end
18
-
19
- task "gh-pages" => :rdoc do
20
- %x[git checkout gh-pages]
21
- require "fileutils"
22
- FileUtils.rm_rf "/tmp/html"
23
- FileUtils.mv "html", "/tmp"
24
- FileUtils.rm_rf "*"
25
- FileUtils.cp_r Dir.glob("/tmp/html/*"), "."
26
- end
27
-
28
- task :default => :test