logger 1.6.1 → 1.6.3

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: 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: []