logger 1.6.1 → 1.6.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c6fa7c02974cf7c275bfa19e6225f8b06bdbc76d49f78e6bf75e351dfb14c1e3
4
- data.tar.gz: d299b1c26a5389316c89a7899359f5d8d1570dae24428bce6c43d9832adc7dc2
3
+ metadata.gz: 5ea8aa364282e9f4b7d9df54639349f9a7c10fb041848a61581e2e5621da9edd
4
+ data.tar.gz: ab4d74f423945d74ce2c5da295654fde1c62d1fe57341cc287ff01fbfd01aa2c
5
5
  SHA512:
6
- metadata.gz: 9b19a5196c89b0c184c5c2ab4a77d5085d26ec6f04c272b7bbd0085beaeaf7d758e9cb0c728c486e07f4498209e70327420ff66f218b4f6baec7d59fe7ec0c44
7
- data.tar.gz: 1fc54467c631ea277b044c9d2b48895f3d2ed684eec2725f3aa1e475c551e1cfb6420fe9540a5eddf0e597794f74ee8c669c506faad44af5ddb8075cb7c8826e
6
+ metadata.gz: 441196d226c3a5bc1e8a1af037483c783672cdccb58e8f171218c725281a69e796beefde27e6972cbbee5f0bf8cbc0dd362a238779d20c4af5899583ea92ac40
7
+ data.tar.gz: 27823b931f9d9a9b0d025025752351a6df3c154c58663e138d2dd788967c5c66322c81f44772129fd7431475c9c54a0b4ed1ffcb96ecd3bb0d5aefebf29d92b0
data/BSDL ADDED
@@ -0,0 +1,22 @@
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/COPYING ADDED
@@ -0,0 +1,56 @@
1
+ Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.jp>.
2
+ You can redistribute it and/or modify it under either the terms of the
3
+ 2-clause BSDL (see the file BSDL), or the conditions below:
4
+
5
+ 1. You may make and give away verbatim copies of the source form of the
6
+ software without restriction, provided that you duplicate all of the
7
+ original copyright notices and associated disclaimers.
8
+
9
+ 2. You may modify your copy of the software in any way, provided that
10
+ you do at least ONE of the following:
11
+
12
+ a. place your modifications in the Public Domain or otherwise
13
+ make them Freely Available, such as by posting said
14
+ modifications to Usenet or an equivalent medium, or by allowing
15
+ the author to include your modifications in the software.
16
+
17
+ b. use the modified software only within your corporation or
18
+ organization.
19
+
20
+ c. give non-standard binaries non-standard names, with
21
+ instructions on where to get the original software distribution.
22
+
23
+ d. make other distribution arrangements with the author.
24
+
25
+ 3. You may distribute the software in object code or binary form,
26
+ provided that you do at least ONE of the following:
27
+
28
+ a. distribute the binaries and library files of the software,
29
+ together with instructions (in the manual page or equivalent)
30
+ on where to get the original distribution.
31
+
32
+ b. accompany the distribution with the machine-readable source of
33
+ the software.
34
+
35
+ c. give non-standard binaries non-standard names, with
36
+ instructions on where to get the original software distribution.
37
+
38
+ d. make other distribution arrangements with the author.
39
+
40
+ 4. You may modify and include the part of the software into any other
41
+ software (possibly commercial). But some files in the distribution
42
+ are not written by the author, so that they are not under these terms.
43
+
44
+ For the list of those files and their copying conditions, see the
45
+ file LEGAL.
46
+
47
+ 5. The scripts and library files supplied as input to or produced as
48
+ output from the software do not automatically fall under the
49
+ copyright of the software, but belong to whomever generated them,
50
+ and may be sold commercially, and may be aggregated with this
51
+ software.
52
+
53
+ 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
54
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
55
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
56
+ PURPOSE.
@@ -30,29 +30,13 @@ class Logger
30
30
  end
31
31
 
32
32
  def write(message)
33
- begin
33
+ handle_write_errors("writing") do
34
34
  synchronize do
35
35
  if @shift_age and @dev.respond_to?(:stat)
36
- begin
37
- check_shift_log
38
- rescue *@reraise_write_errors
39
- raise
40
- rescue
41
- warn("log shifting failed. #{$!}")
42
- end
43
- end
44
- begin
45
- @dev.write(message)
46
- rescue *@reraise_write_errors
47
- raise
48
- rescue
49
- warn("log writing failed. #{$!}")
36
+ handle_write_errors("shifting") {check_shift_log}
50
37
  end
38
+ handle_write_errors("writing") {@dev.write(message)}
51
39
  end
52
- rescue *@reraise_write_errors
53
- raise
54
- rescue Exception => ignored
55
- warn("log writing failed. #{ignored}")
56
40
  end
57
41
  end
58
42
 
@@ -83,6 +67,12 @@ class Logger
83
67
 
84
68
  private
85
69
 
70
+ # :stopdoc:
71
+
72
+ MODE = File::WRONLY | File::APPEND
73
+ MODE_TO_OPEN = MODE | File::SHARE_DELETE | File::BINARY
74
+ MODE_TO_CREATE = MODE_TO_OPEN | File::CREAT | File::EXCL
75
+
86
76
  def set_dev(log)
87
77
  if log.respond_to?(:write) and log.respond_to?(:close)
88
78
  @dev = log
@@ -93,34 +83,61 @@ class Logger
93
83
  end
94
84
  else
95
85
  @dev = open_logfile(log)
96
- @dev.sync = true
97
- @dev.binmode if @binmode
98
86
  @filename = log
99
87
  end
100
88
  end
101
89
 
90
+ if MODE_TO_OPEN == MODE
91
+ def fixup_mode(dev, filename)
92
+ dev
93
+ end
94
+ else
95
+ def fixup_mode(dev, filename)
96
+ return dev if @binmode
97
+ dev.autoclose = false
98
+ old_dev = dev
99
+ dev = File.new(dev.fileno, mode: MODE, path: filename)
100
+ old_dev.close
101
+ PathAttr.set_path(dev, filename) if defined?(PathAttr)
102
+ dev
103
+ end
104
+ end
105
+
102
106
  def open_logfile(filename)
103
107
  begin
104
- File.open(filename, (File::WRONLY | File::APPEND))
108
+ dev = File.open(filename, MODE_TO_OPEN)
105
109
  rescue Errno::ENOENT
106
110
  create_logfile(filename)
111
+ else
112
+ dev = fixup_mode(dev, filename)
113
+ dev.sync = true
114
+ dev.binmode if @binmode
115
+ dev
107
116
  end
108
117
  end
109
118
 
110
119
  def create_logfile(filename)
111
120
  begin
112
- logdev = File.open(filename, (File::WRONLY | File::APPEND | File::CREAT | File::EXCL))
121
+ logdev = File.open(filename, MODE_TO_CREATE)
113
122
  logdev.flock(File::LOCK_EX)
123
+ logdev = fixup_mode(logdev, filename)
114
124
  logdev.sync = true
115
125
  logdev.binmode if @binmode
116
126
  add_log_header(logdev)
117
127
  logdev.flock(File::LOCK_UN)
128
+ logdev
118
129
  rescue Errno::EEXIST
119
130
  # file is created by another process
120
- logdev = open_logfile(filename)
121
- logdev.sync = true
131
+ open_logfile(filename)
122
132
  end
123
- logdev
133
+ end
134
+
135
+ def handle_write_errors(mesg)
136
+ yield
137
+ rescue *@reraise_write_errors
138
+ raise
139
+ rescue
140
+ warn("log #{mesg} failed. #{$!}")
124
141
  end
125
142
 
126
143
  def add_log_header(file)
@@ -144,40 +161,33 @@ class Logger
144
161
  end
145
162
  end
146
163
 
147
- if /mswin|mingw|cygwin/ =~ RbConfig::CONFIG['host_os']
148
- def lock_shift_log
149
- yield
150
- end
151
- else
152
- def lock_shift_log
153
- retry_limit = 8
154
- retry_sleep = 0.1
155
- begin
156
- File.open(@filename, File::WRONLY | File::APPEND) do |lock|
157
- lock.flock(File::LOCK_EX) # inter-process locking. will be unlocked at closing file
158
- if File.identical?(@filename, lock) and File.identical?(lock, @dev)
159
- yield # log shifting
160
- else
161
- # log shifted by another process (i-node before locking and i-node after locking are different)
162
- @dev.close rescue nil
163
- @dev = open_logfile(@filename)
164
- @dev.sync = true
165
- end
166
- end
167
- rescue Errno::ENOENT
168
- # @filename file would not exist right after #rename and before #create_logfile
169
- if retry_limit <= 0
170
- warn("log rotation inter-process lock failed. #{$!}")
164
+ def lock_shift_log
165
+ retry_limit = 8
166
+ retry_sleep = 0.1
167
+ begin
168
+ File.open(@filename, MODE_TO_OPEN) do |lock|
169
+ lock.flock(File::LOCK_EX) # inter-process locking. will be unlocked at closing file
170
+ if File.identical?(@filename, lock) and File.identical?(lock, @dev)
171
+ yield # log shifting
171
172
  else
172
- sleep retry_sleep
173
- retry_limit -= 1
174
- retry_sleep *= 2
175
- retry
173
+ # log shifted by another process (i-node before locking and i-node after locking are different)
174
+ @dev.close rescue nil
175
+ @dev = open_logfile(@filename)
176
176
  end
177
177
  end
178
- rescue
179
- warn("log rotation inter-process lock failed. #{$!}")
178
+ rescue Errno::ENOENT
179
+ # @filename file would not exist right after #rename and before #create_logfile
180
+ if retry_limit <= 0
181
+ warn("log rotation inter-process lock failed. #{$!}")
182
+ else
183
+ sleep retry_sleep
184
+ retry_limit -= 1
185
+ retry_sleep *= 2
186
+ retry
187
+ end
180
188
  end
189
+ rescue
190
+ warn("log rotation inter-process lock failed. #{$!}")
181
191
  end
182
192
 
183
193
  def shift_log_age
@@ -212,3 +222,15 @@ class Logger
212
222
  end
213
223
  end
214
224
  end
225
+
226
+ File.open(IO::NULL) do |f|
227
+ File.new(f.fileno, autoclose: false, path: "").path
228
+ rescue IOError
229
+ module PathAttr # :nodoc:
230
+ attr_reader :path
231
+
232
+ def self.set_path(file, path)
233
+ file.extend(self).instance_variable_set(:@path, path)
234
+ end
235
+ end
236
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Logger
4
- VERSION = "1.6.1"
4
+ VERSION = "1.6.3"
5
5
  end
data/lib/logger.rb CHANGED
@@ -381,7 +381,7 @@ class Logger
381
381
 
382
382
  # Logging severity threshold (e.g. <tt>Logger::INFO</tt>).
383
383
  def level
384
- level_override[Fiber.current] || @level
384
+ level_override[level_key] || @level
385
385
  end
386
386
 
387
387
  # Sets the log level; returns +severity+.
@@ -406,14 +406,14 @@ class Logger
406
406
  # logger.debug { "Hello" }
407
407
  # end
408
408
  def with_level(severity)
409
- prev, level_override[Fiber.current] = level, Severity.coerce(severity)
409
+ prev, level_override[level_key] = level, Severity.coerce(severity)
410
410
  begin
411
411
  yield
412
412
  ensure
413
413
  if prev
414
- level_override[Fiber.current] = prev
414
+ level_override[level_key] = prev
415
415
  else
416
- level_override.delete(Fiber.current)
416
+ level_override.delete(level_key)
417
417
  end
418
418
  end
419
419
  end
@@ -751,6 +751,10 @@ private
751
751
  @level_override ||= {}
752
752
  end
753
753
 
754
+ def level_key
755
+ Fiber.current
756
+ end
757
+
754
758
  def format_message(severity, datetime, progname, msg)
755
759
  (@formatter || @default_formatter).call(severity, datetime, progname, msg)
756
760
  end
data/logger.gemspec CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |spec|
15
15
  spec.homepage = "https://github.com/ruby/logger"
16
16
  spec.licenses = ["Ruby", "BSD-2-Clause"]
17
17
 
18
- spec.files = Dir.glob("lib/**/*.rb") + ["logger.gemspec"]
18
+ spec.files = Dir.glob("lib/**/*.rb") + ["logger.gemspec", "BSDL", "COPYING"]
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.required_ruby_version = ">= 2.5.0"
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.1
4
+ version: 1.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Naotoshi Seo
8
8
  - SHIBATA Hiroshi
9
+ autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2024-09-02 00:00:00.000000000 Z
12
+ date: 2024-12-13 00:00:00.000000000 Z
12
13
  dependencies: []
13
14
  description: Provides a simple logging utility for outputting messages.
14
15
  email:
@@ -18,6 +19,8 @@ executables: []
18
19
  extensions: []
19
20
  extra_rdoc_files: []
20
21
  files:
22
+ - BSDL
23
+ - COPYING
21
24
  - lib/logger.rb
22
25
  - lib/logger/errors.rb
23
26
  - lib/logger/formatter.rb
@@ -31,6 +34,7 @@ licenses:
31
34
  - Ruby
32
35
  - BSD-2-Clause
33
36
  metadata: {}
37
+ post_install_message:
34
38
  rdoc_options: []
35
39
  require_paths:
36
40
  - lib
@@ -45,7 +49,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
45
49
  - !ruby/object:Gem::Version
46
50
  version: '0'
47
51
  requirements: []
48
- rubygems_version: 3.6.0.dev
52
+ rubygems_version: 3.5.11
53
+ signing_key:
49
54
  specification_version: 4
50
55
  summary: Provides a simple logging utility for outputting messages.
51
56
  test_files: []