rbs 3.0.0.dev.2 → 3.0.0.dev.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 +4 -4
- data/.github/workflows/comments.yml +2 -1
- data/.github/workflows/ruby.yml +4 -0
- data/Gemfile.lock +11 -11
- data/Rakefile +2 -2
- data/Steepfile +1 -1
- data/core/array.rbs +573 -423
- data/core/basic_object.rbs +11 -39
- data/core/binding.rbs +1 -1
- data/core/builtin.rbs +8 -0
- data/core/class.rbs +37 -0
- data/core/comparable.rbs +7 -18
- data/core/complex.rbs +2 -2
- data/core/data.rbs +419 -0
- data/core/dir.rbs +52 -104
- data/core/encoding.rbs +22 -181
- data/core/enumerable.rbs +212 -175
- data/core/enumerator/product.rbs +96 -0
- data/core/enumerator.rbs +57 -8
- data/core/errors.rbs +8 -2
- data/core/exception.rbs +41 -0
- data/core/fiber.rbs +95 -12
- data/core/file.rbs +840 -275
- data/core/file_test.rbs +34 -19
- data/core/float.rbs +40 -96
- data/core/gc.rbs +15 -3
- data/core/hash.rbs +113 -175
- data/core/integer.rbs +85 -145
- data/core/io/buffer.rbs +187 -60
- data/core/io/wait.rbs +28 -16
- data/core/io.rbs +1859 -1389
- data/core/kernel.rbs +525 -961
- data/core/match_data.rbs +306 -142
- data/core/math.rbs +506 -234
- data/core/method.rbs +0 -24
- data/core/module.rbs +110 -17
- data/core/nil_class.rbs +2 -0
- data/core/numeric.rbs +76 -144
- data/core/object.rbs +88 -212
- data/core/proc.rbs +17 -5
- data/core/process.rbs +22 -5
- data/core/ractor.rbs +1 -1
- data/core/random.rbs +20 -3
- data/core/range.rbs +91 -89
- data/core/rational.rbs +2 -3
- data/core/rbs/unnamed/argf.rbs +177 -120
- data/core/rbs/unnamed/env_class.rbs +89 -163
- data/core/rbs/unnamed/random.rbs +36 -12
- data/core/refinement.rbs +8 -0
- data/core/regexp.rbs +462 -272
- data/core/ruby_vm.rbs +210 -0
- data/{stdlib/set/0 → core}/set.rbs +43 -47
- data/core/string.rbs +1403 -1332
- data/core/string_io.rbs +191 -107
- data/core/struct.rbs +67 -63
- data/core/symbol.rbs +187 -201
- data/core/thread.rbs +40 -35
- data/core/time.rbs +902 -826
- data/core/trace_point.rbs +55 -6
- data/core/unbound_method.rbs +48 -24
- data/docs/collection.md +4 -0
- data/docs/syntax.md +55 -0
- data/ext/rbs_extension/parser.c +5 -6
- data/lib/rbs/cli.rb +6 -1
- data/lib/rbs/collection/cleaner.rb +8 -1
- data/lib/rbs/collection/config/lockfile.rb +3 -1
- data/lib/rbs/collection/config/lockfile_generator.rb +16 -14
- data/lib/rbs/collection/config.rb +1 -1
- data/lib/rbs/collection/sources/git.rb +9 -2
- data/lib/rbs/collection/sources/local.rb +79 -0
- data/lib/rbs/collection/sources.rb +8 -1
- data/lib/rbs/environment.rb +6 -5
- data/lib/rbs/environment_loader.rb +3 -2
- data/lib/rbs/errors.rb +18 -0
- data/lib/rbs/locator.rb +26 -7
- data/lib/rbs/sorter.rb +2 -2
- data/lib/rbs/version.rb +1 -1
- data/sig/collection/sources.rbs +32 -3
- data/sig/environment.rbs +2 -3
- data/sig/locator.rbs +14 -2
- data/sig/shims/{abstract_syntax_tree.rbs → _abstract_syntax_tree.rbs} +0 -0
- data/stdlib/bigdecimal/0/big_decimal.rbs +16 -13
- data/stdlib/cgi/0/core.rbs +16 -0
- data/stdlib/coverage/0/coverage.rbs +50 -8
- data/stdlib/csv/0/csv.rbs +1 -1
- data/stdlib/date/0/date.rbs +856 -726
- data/stdlib/date/0/date_time.rbs +83 -210
- data/stdlib/erb/0/erb.rbs +13 -36
- data/stdlib/etc/0/etc.rbs +127 -20
- data/stdlib/fileutils/0/fileutils.rbs +1290 -381
- data/stdlib/logger/0/logger.rbs +466 -316
- data/stdlib/net-http/0/net-http.rbs +2211 -534
- data/stdlib/nkf/0/nkf.rbs +5 -5
- data/stdlib/objspace/0/objspace.rbs +31 -14
- data/stdlib/openssl/0/openssl.rbs +11 -7
- data/stdlib/optparse/0/optparse.rbs +20 -17
- data/stdlib/pathname/0/pathname.rbs +21 -4
- data/stdlib/pstore/0/pstore.rbs +378 -154
- data/stdlib/pty/0/pty.rbs +24 -8
- data/stdlib/ripper/0/ripper.rbs +1650 -0
- data/stdlib/socket/0/addrinfo.rbs +9 -15
- data/stdlib/socket/0/socket.rbs +36 -3
- data/stdlib/strscan/0/string_scanner.rbs +7 -5
- data/stdlib/tempfile/0/tempfile.rbs +104 -44
- data/stdlib/time/0/time.rbs +2 -2
- data/stdlib/uri/0/file.rbs +5 -0
- data/stdlib/uri/0/generic.rbs +2 -2
- data/stdlib/yaml/0/yaml.rbs +2 -2
- data/stdlib/zlib/0/zlib.rbs +1 -1
- metadata +8 -6
- data/core/deprecated.rbs +0 -9
- data/sig/shims/ripper.rbs +0 -8
data/stdlib/logger/0/logger.rbs
CHANGED
|
@@ -1,225 +1,352 @@
|
|
|
1
1
|
# <!-- rdoc-file=lib/logger.rb -->
|
|
2
|
-
#
|
|
2
|
+
# Class Logger provides a simple but sophisticated logging utility that you can
|
|
3
|
+
# use to create one or more [event
|
|
4
|
+
# logs](https://en.wikipedia.org/wiki/Logging_(software)#Event_logs) for your
|
|
5
|
+
# program. Each such log contains a chronological sequence of entries that
|
|
6
|
+
# provides a record of the program's activities.
|
|
3
7
|
#
|
|
4
|
-
#
|
|
5
|
-
# can use to output messages.
|
|
8
|
+
# ## About the Examples
|
|
6
9
|
#
|
|
7
|
-
#
|
|
8
|
-
# their importance. You can then give the Logger a level, and only messages at
|
|
9
|
-
# that level or higher will be printed.
|
|
10
|
+
# All examples on this page assume that Logger has been required:
|
|
10
11
|
#
|
|
11
|
-
#
|
|
12
|
+
# require 'logger'
|
|
12
13
|
#
|
|
13
|
-
#
|
|
14
|
-
# : An unknown message that should always be logged.
|
|
15
|
-
# `FATAL`
|
|
16
|
-
# : An unhandleable error that results in a program crash.
|
|
17
|
-
# `ERROR`
|
|
18
|
-
# : A handleable error condition.
|
|
19
|
-
# `WARN`
|
|
20
|
-
# : A warning.
|
|
21
|
-
# `INFO`
|
|
22
|
-
# : Generic (useful) information about system operation.
|
|
23
|
-
# `DEBUG`
|
|
24
|
-
# : Low-level information for developers.
|
|
14
|
+
# ## Synopsis
|
|
25
15
|
#
|
|
16
|
+
# Create a log with Logger.new:
|
|
26
17
|
#
|
|
27
|
-
#
|
|
28
|
-
#
|
|
29
|
-
#
|
|
30
|
-
#
|
|
18
|
+
# # Single log file.
|
|
19
|
+
# logger = Logger.new('t.log')
|
|
20
|
+
# # Size-based rotated logging: 3 10-megabyte files.
|
|
21
|
+
# logger = Logger.new('t.log', 3, 10485760)
|
|
22
|
+
# # Period-based rotated logging: daily (also allowed: 'weekly', 'monthly').
|
|
23
|
+
# logger = Logger.new('t.log', 'daily')
|
|
24
|
+
# # Log to an IO stream.
|
|
25
|
+
# logger = Logger.new($stdout)
|
|
31
26
|
#
|
|
32
|
-
#
|
|
33
|
-
# Developers should be aware of when potentially malicious data (user-input) is
|
|
34
|
-
# passed to Logger, and manually escape the untrusted data:
|
|
27
|
+
# Add entries (level, message) with Logger#add:
|
|
35
28
|
#
|
|
36
|
-
# logger.
|
|
37
|
-
# logger.
|
|
29
|
+
# logger.add(Logger::DEBUG, 'Maximal debugging info')
|
|
30
|
+
# logger.add(Logger::INFO, 'Non-error information')
|
|
31
|
+
# logger.add(Logger::WARN, 'Non-error warning')
|
|
32
|
+
# logger.add(Logger::ERROR, 'Non-fatal error')
|
|
33
|
+
# logger.add(Logger::FATAL, 'Fatal error')
|
|
34
|
+
# logger.add(Logger::UNKNOWN, 'Most severe')
|
|
38
35
|
#
|
|
39
|
-
#
|
|
36
|
+
# Close the log with Logger#close:
|
|
40
37
|
#
|
|
41
|
-
#
|
|
42
|
-
# logger.formatter = proc { |severity, datetime, progname, msg|
|
|
43
|
-
# original_formatter.call(severity, datetime, progname, msg.dump)
|
|
44
|
-
# }
|
|
45
|
-
# logger.info(input)
|
|
38
|
+
# logger.close
|
|
46
39
|
#
|
|
47
|
-
#
|
|
40
|
+
# ## Entries
|
|
48
41
|
#
|
|
49
|
-
#
|
|
50
|
-
# of `WARN`:
|
|
42
|
+
# You can add entries with method Logger#add:
|
|
51
43
|
#
|
|
52
|
-
#
|
|
44
|
+
# logger.add(Logger::DEBUG, 'Maximal debugging info')
|
|
45
|
+
# logger.add(Logger::INFO, 'Non-error information')
|
|
46
|
+
# logger.add(Logger::WARN, 'Non-error warning')
|
|
47
|
+
# logger.add(Logger::ERROR, 'Non-fatal error')
|
|
48
|
+
# logger.add(Logger::FATAL, 'Fatal error')
|
|
49
|
+
# logger.add(Logger::UNKNOWN, 'Most severe')
|
|
53
50
|
#
|
|
54
|
-
#
|
|
55
|
-
# logger.level = Logger::WARN
|
|
51
|
+
# These shorthand methods also add entries:
|
|
56
52
|
#
|
|
57
|
-
# logger.debug(
|
|
58
|
-
# logger.info(
|
|
59
|
-
# logger.warn(
|
|
53
|
+
# logger.debug('Maximal debugging info')
|
|
54
|
+
# logger.info('Non-error information')
|
|
55
|
+
# logger.warn('Non-error warning')
|
|
56
|
+
# logger.error('Non-fatal error')
|
|
57
|
+
# logger.fatal('Fatal error')
|
|
58
|
+
# logger.unknown('Most severe')
|
|
60
59
|
#
|
|
61
|
-
#
|
|
60
|
+
# When you call any of these methods, the entry may or may not be written to the
|
|
61
|
+
# log, depending on the entry's severity and on the log level; see [Log
|
|
62
|
+
# Level](rdoc-ref:Logger@Log+Level)
|
|
62
63
|
#
|
|
63
|
-
#
|
|
64
|
-
# File.foreach(path) do |line|
|
|
65
|
-
# unless line =~ /^(\w+) = (.*)$/
|
|
66
|
-
# logger.error("Line in wrong format: #{line.chomp}")
|
|
67
|
-
# end
|
|
68
|
-
# end
|
|
69
|
-
# rescue => err
|
|
70
|
-
# logger.fatal("Caught exception; exiting")
|
|
71
|
-
# logger.fatal(err)
|
|
72
|
-
# end
|
|
64
|
+
# An entry always has:
|
|
73
65
|
#
|
|
74
|
-
#
|
|
75
|
-
#
|
|
76
|
-
# discarded.
|
|
66
|
+
# * A severity (the required argument to #add).
|
|
67
|
+
# * An automatically created timestamp.
|
|
77
68
|
#
|
|
78
|
-
# ### Features
|
|
79
69
|
#
|
|
80
|
-
#
|
|
81
|
-
# of log files, setting the format of log messages, and specifying a program
|
|
82
|
-
# name in conjunction with the message. The next section shows you how to
|
|
83
|
-
# achieve these things.
|
|
70
|
+
# And may also have:
|
|
84
71
|
#
|
|
85
|
-
#
|
|
72
|
+
# * A message.
|
|
73
|
+
# * A program name.
|
|
86
74
|
#
|
|
87
|
-
# ### How to create a logger
|
|
88
75
|
#
|
|
89
|
-
#
|
|
90
|
-
# complexity.
|
|
76
|
+
# Example:
|
|
91
77
|
#
|
|
92
|
-
#
|
|
78
|
+
# logger = Logger.new($stdout)
|
|
79
|
+
# logger.add(Logger::INFO, 'My message.', 'mung')
|
|
80
|
+
# # => I, [2022-05-07T17:21:46.536234 #20536] INFO -- mung: My message.
|
|
93
81
|
#
|
|
94
|
-
#
|
|
95
|
-
# logger = Logger.new(STDOUT)
|
|
82
|
+
# The default format for an entry is:
|
|
96
83
|
#
|
|
97
|
-
#
|
|
84
|
+
# "%s, [%s #%d] %5s -- %s: %s\n"
|
|
98
85
|
#
|
|
99
|
-
#
|
|
86
|
+
# where the values to be formatted are:
|
|
100
87
|
#
|
|
101
|
-
#
|
|
88
|
+
# * Severity (one letter).
|
|
89
|
+
# * Timestamp.
|
|
90
|
+
# * Process id.
|
|
91
|
+
# * Severity (word).
|
|
92
|
+
# * Program name.
|
|
93
|
+
# * Message.
|
|
102
94
|
#
|
|
103
|
-
# file = File.open('foo.log', File::WRONLY | File::APPEND)
|
|
104
|
-
# # To create new logfile, add File::CREAT like:
|
|
105
|
-
# # file = File.open('foo.log', File::WRONLY | File::APPEND | File::CREAT)
|
|
106
|
-
# logger = Logger.new(file)
|
|
107
95
|
#
|
|
108
|
-
#
|
|
109
|
-
# Leave 10 "old" log files where each file is about 1,024,000 bytes.
|
|
96
|
+
# You can use a different entry format by:
|
|
110
97
|
#
|
|
111
|
-
#
|
|
98
|
+
# * Setting a custom format proc (affects following entries); see
|
|
99
|
+
# [formatter=](Logger.html#attribute-i-formatter).
|
|
100
|
+
# * Calling any of the methods above with a block (affects only the one
|
|
101
|
+
# entry). Doing so can have two benefits:
|
|
112
102
|
#
|
|
113
|
-
#
|
|
103
|
+
# * Context: the block can evaluate the entire program context and create
|
|
104
|
+
# a context-dependent message.
|
|
105
|
+
# * Performance: the block is not evaluated unless the log level permits
|
|
106
|
+
# the entry actually to be written:
|
|
114
107
|
#
|
|
115
|
-
#
|
|
116
|
-
# logger = Logger.new('foo.log', 'weekly')
|
|
117
|
-
# logger = Logger.new('foo.log', 'monthly')
|
|
108
|
+
# logger.error { my_slow_message_generator }
|
|
118
109
|
#
|
|
110
|
+
# Contrast this with the string form, where the string is always
|
|
111
|
+
# evaluated, regardless of the log level:
|
|
119
112
|
#
|
|
120
|
-
#
|
|
113
|
+
# logger.error("#{my_slow_message_generator}")
|
|
121
114
|
#
|
|
122
|
-
# Notice the different methods (`fatal`, `error`, `info`) being used to log
|
|
123
|
-
# messages of various levels? Other methods in this family are `warn` and
|
|
124
|
-
# `debug`. `add` is used below to log a message of an arbitrary (perhaps
|
|
125
|
-
# dynamic) level.
|
|
126
115
|
#
|
|
127
|
-
# 1. Message in a block.
|
|
128
116
|
#
|
|
129
|
-
#
|
|
117
|
+
# ### Severity
|
|
130
118
|
#
|
|
131
|
-
#
|
|
119
|
+
# The severity of a log entry has two effects:
|
|
132
120
|
#
|
|
133
|
-
#
|
|
121
|
+
# * Determines whether the entry is selected for inclusion in the log; see
|
|
122
|
+
# [Log Level](rdoc-ref:Logger@Log+Level).
|
|
123
|
+
# * Indicates to any log reader (whether a person or a program) the relative
|
|
124
|
+
# importance of the entry.
|
|
134
125
|
#
|
|
135
|
-
# 3. With progname.
|
|
136
126
|
#
|
|
137
|
-
#
|
|
127
|
+
# ### Timestamp
|
|
138
128
|
#
|
|
139
|
-
#
|
|
129
|
+
# The timestamp for a log entry is generated automatically when the entry is
|
|
130
|
+
# created.
|
|
140
131
|
#
|
|
141
|
-
#
|
|
132
|
+
# The logged timestamp is formatted by method
|
|
133
|
+
# [Time#strftime](rdoc-ref:Time#strftime) using this format string:
|
|
142
134
|
#
|
|
135
|
+
# '%Y-%m-%dT%H:%M:%S.%6N'
|
|
143
136
|
#
|
|
144
|
-
#
|
|
145
|
-
# delay their evaluation until and unless the message is logged. For example,
|
|
146
|
-
# if we have the following:
|
|
137
|
+
# Example:
|
|
147
138
|
#
|
|
148
|
-
# logger
|
|
139
|
+
# logger = Logger.new($stdout)
|
|
140
|
+
# logger.add(Logger::INFO)
|
|
141
|
+
# # => I, [2022-05-07T17:04:32.318331 #20536] INFO -- : nil
|
|
149
142
|
#
|
|
150
|
-
#
|
|
151
|
-
# and the entire block will not even be evaluated. Compare to this:
|
|
143
|
+
# You can set a different format using method #datetime_format=.
|
|
152
144
|
#
|
|
153
|
-
#
|
|
145
|
+
# ### Message
|
|
154
146
|
#
|
|
155
|
-
#
|
|
156
|
-
# not set to show the debug message.
|
|
147
|
+
# The message is an optional argument to an entry method:
|
|
157
148
|
#
|
|
158
|
-
#
|
|
149
|
+
# logger = Logger.new($stdout)
|
|
150
|
+
# logger.add(Logger::INFO, 'My message')
|
|
151
|
+
# # => I, [2022-05-07T18:15:37.647581 #20536] INFO -- : My message
|
|
159
152
|
#
|
|
160
|
-
#
|
|
153
|
+
# For the default entry formatter, `Logger::Formatter`, the message object may
|
|
154
|
+
# be:
|
|
155
|
+
#
|
|
156
|
+
# * A string: used as-is.
|
|
157
|
+
# * An Exception: `message.message` is used.
|
|
158
|
+
# * Anything else: `message.inspect` is used.
|
|
159
|
+
#
|
|
160
|
+
#
|
|
161
|
+
# **Note**: Logger::Formatter does not escape or sanitize the message passed to
|
|
162
|
+
# it. Developers should be aware that malicious data (user input) may be in the
|
|
163
|
+
# message, and should explicitly escape untrusted data.
|
|
164
|
+
#
|
|
165
|
+
# You can use a custom formatter to escape message data; see the example at
|
|
166
|
+
# [formatter=](Logger.html#attribute-i-formatter).
|
|
167
|
+
#
|
|
168
|
+
# ### Program Name
|
|
169
|
+
#
|
|
170
|
+
# The program name is an optional argument to an entry method:
|
|
171
|
+
#
|
|
172
|
+
# logger = Logger.new($stdout)
|
|
173
|
+
# logger.add(Logger::INFO, 'My message', 'mung')
|
|
174
|
+
# # => I, [2022-05-07T18:17:38.084716 #20536] INFO -- mung: My message
|
|
175
|
+
#
|
|
176
|
+
# The default program name for a new logger may be set in the call to Logger.new
|
|
177
|
+
# via optional keyword argument `progname`:
|
|
178
|
+
#
|
|
179
|
+
# logger = Logger.new('t.log', progname: 'mung')
|
|
180
|
+
#
|
|
181
|
+
# The default program name for an existing logger may be set by a call to method
|
|
182
|
+
# #progname=:
|
|
183
|
+
#
|
|
184
|
+
# logger.progname = 'mung'
|
|
185
|
+
#
|
|
186
|
+
# The current program name may be retrieved with method
|
|
187
|
+
# [progname](Logger.html#attribute-i-progname):
|
|
188
|
+
#
|
|
189
|
+
# logger.progname # => "mung"
|
|
190
|
+
#
|
|
191
|
+
# ## Log Level
|
|
192
|
+
#
|
|
193
|
+
# The log level setting determines whether an entry is actually written to the
|
|
194
|
+
# log, based on the entry's severity.
|
|
195
|
+
#
|
|
196
|
+
# These are the defined severities (least severe to most severe):
|
|
197
|
+
#
|
|
198
|
+
# logger = Logger.new($stdout)
|
|
199
|
+
# logger.add(Logger::DEBUG, 'Maximal debugging info')
|
|
200
|
+
# # => D, [2022-05-07T17:57:41.776220 #20536] DEBUG -- : Maximal debugging info
|
|
201
|
+
# logger.add(Logger::INFO, 'Non-error information')
|
|
202
|
+
# # => I, [2022-05-07T17:59:14.349167 #20536] INFO -- : Non-error information
|
|
203
|
+
# logger.add(Logger::WARN, 'Non-error warning')
|
|
204
|
+
# # => W, [2022-05-07T18:00:45.337538 #20536] WARN -- : Non-error warning
|
|
205
|
+
# logger.add(Logger::ERROR, 'Non-fatal error')
|
|
206
|
+
# # => E, [2022-05-07T18:02:41.592912 #20536] ERROR -- : Non-fatal error
|
|
207
|
+
# logger.add(Logger::FATAL, 'Fatal error')
|
|
208
|
+
# # => F, [2022-05-07T18:05:24.703931 #20536] FATAL -- : Fatal error
|
|
209
|
+
# logger.add(Logger::UNKNOWN, 'Most severe')
|
|
210
|
+
# # => A, [2022-05-07T18:07:54.657491 #20536] ANY -- : Most severe
|
|
211
|
+
#
|
|
212
|
+
# The default initial level setting is Logger::DEBUG, the lowest level, which
|
|
213
|
+
# means that all entries are to be written, regardless of severity:
|
|
214
|
+
#
|
|
215
|
+
# logger = Logger.new($stdout)
|
|
216
|
+
# logger.level # => 0
|
|
217
|
+
# logger.add(0, "My message")
|
|
218
|
+
# # => D, [2022-05-11T15:10:59.773668 #20536] DEBUG -- : My message
|
|
161
219
|
#
|
|
162
|
-
#
|
|
220
|
+
# You can specify a different setting in a new logger using keyword argument
|
|
221
|
+
# `level` with an appropriate value:
|
|
163
222
|
#
|
|
164
|
-
#
|
|
223
|
+
# logger = Logger.new($stdout, level: Logger::ERROR)
|
|
224
|
+
# logger = Logger.new($stdout, level: 'error')
|
|
225
|
+
# logger = Logger.new($stdout, level: :error)
|
|
226
|
+
# logger.level # => 3
|
|
165
227
|
#
|
|
166
|
-
#
|
|
228
|
+
# With this level, entries with severity Logger::ERROR and higher are written,
|
|
229
|
+
# while those with lower severities are not written:
|
|
167
230
|
#
|
|
168
|
-
#
|
|
231
|
+
# logger = Logger.new($stdout, level: Logger::ERROR)
|
|
232
|
+
# logger.add(3)
|
|
233
|
+
# # => E, [2022-05-11T15:17:20.933362 #20536] ERROR -- : nil
|
|
234
|
+
# logger.add(2) # Silent.
|
|
169
235
|
#
|
|
170
|
-
#
|
|
236
|
+
# You can set the log level for an existing logger with method #level=:
|
|
171
237
|
#
|
|
172
|
-
#
|
|
238
|
+
# logger.level = Logger::ERROR
|
|
173
239
|
#
|
|
174
|
-
#
|
|
240
|
+
# These shorthand methods also set the level:
|
|
175
241
|
#
|
|
176
|
-
#
|
|
177
|
-
#
|
|
242
|
+
# logger.debug! # => 0
|
|
243
|
+
# logger.info! # => 1
|
|
244
|
+
# logger.warn! # => 2
|
|
245
|
+
# logger.error! # => 3
|
|
246
|
+
# logger.fatal! # => 4
|
|
178
247
|
#
|
|
179
|
-
#
|
|
248
|
+
# You can retrieve the log level with method
|
|
249
|
+
# [level](Logger.html#attribute-i-level):
|
|
180
250
|
#
|
|
181
|
-
#
|
|
251
|
+
# logger.level = Logger::ERROR
|
|
252
|
+
# logger.level # => 3
|
|
182
253
|
#
|
|
183
|
-
#
|
|
184
|
-
# Logger.new(logdev, level: :info)
|
|
185
|
-
# Logger.new(logdev, level: 'INFO')
|
|
254
|
+
# These methods return whether a given level is to be written:
|
|
186
255
|
#
|
|
256
|
+
# logger.level = Logger::ERROR
|
|
257
|
+
# logger.debug? # => false
|
|
258
|
+
# logger.info? # => false
|
|
259
|
+
# logger.warn? # => false
|
|
260
|
+
# logger.error? # => true
|
|
261
|
+
# logger.fatal? # => true
|
|
187
262
|
#
|
|
188
|
-
# ##
|
|
263
|
+
# ## Log File Rotation
|
|
189
264
|
#
|
|
190
|
-
#
|
|
191
|
-
#
|
|
265
|
+
# By default, a log file is a single file that grows indefinitely (until
|
|
266
|
+
# explicitly closed); there is no file rotation.
|
|
192
267
|
#
|
|
193
|
-
#
|
|
194
|
-
#
|
|
268
|
+
# To keep log files to a manageable size, you can use *log* *file* *rotation*,
|
|
269
|
+
# which uses multiple log files:
|
|
195
270
|
#
|
|
196
|
-
#
|
|
197
|
-
#
|
|
271
|
+
# * Each log file has entries for a non-overlapping time interval.
|
|
272
|
+
# * Only the most recent log file is open and active; the others are closed
|
|
273
|
+
# and inactive.
|
|
198
274
|
#
|
|
199
|
-
# You may change the date and time format via #datetime_format=.
|
|
200
275
|
#
|
|
201
|
-
#
|
|
202
|
-
# # e.g. "2004-01-03 00:54:26"
|
|
276
|
+
# ### Size-Based Rotation
|
|
203
277
|
#
|
|
204
|
-
#
|
|
278
|
+
# For size-based log file rotation, call Logger.new with:
|
|
205
279
|
#
|
|
206
|
-
#
|
|
280
|
+
# * Argument `logdev` as a file path.
|
|
281
|
+
# * Argument `shift_age` with a positive integer: the number of log files to
|
|
282
|
+
# be in the rotation.
|
|
283
|
+
# * Argument `shift_size` as a positive integer: the maximum size (in bytes)
|
|
284
|
+
# of each log file; defaults to 1048576 (1 megabyte).
|
|
207
285
|
#
|
|
208
|
-
# Or, you may change the overall format via the #formatter= method.
|
|
209
286
|
#
|
|
210
|
-
#
|
|
211
|
-
# "#{datetime}: #{msg}\n"
|
|
212
|
-
# end
|
|
213
|
-
# # e.g. "2005-09-22 08:51:08 +0900: hello world"
|
|
287
|
+
# Examples:
|
|
214
288
|
#
|
|
215
|
-
#
|
|
289
|
+
# logger = Logger.new('t.log', 3) # Three 1-megabyte files.
|
|
290
|
+
# logger = Logger.new('t.log', 5, 10485760) # Five 10-megabyte files.
|
|
216
291
|
#
|
|
217
|
-
#
|
|
218
|
-
# "#{datetime}: #{msg}\n"
|
|
219
|
-
# })
|
|
292
|
+
# For these examples, suppose:
|
|
220
293
|
#
|
|
221
|
-
#
|
|
222
|
-
#
|
|
294
|
+
# logger = Logger.new('t.log', 3)
|
|
295
|
+
#
|
|
296
|
+
# Logging begins in the new log file, `t.log`; the log file is "full" and ready
|
|
297
|
+
# for rotation when a new entry would cause its size to exceed `shift_size`.
|
|
298
|
+
#
|
|
299
|
+
# The first time `t.log` is full:
|
|
300
|
+
#
|
|
301
|
+
# * `t.log` is closed and renamed to `t.log.0`.
|
|
302
|
+
# * A new file `t.log` is opened.
|
|
303
|
+
#
|
|
304
|
+
#
|
|
305
|
+
# The second time `t.log` is full:
|
|
306
|
+
#
|
|
307
|
+
# * +t.log.0 is renamed as `t.log.1`.
|
|
308
|
+
# * `t.log` is closed and renamed to `t.log.0`.
|
|
309
|
+
# * A new file `t.log` is opened.
|
|
310
|
+
#
|
|
311
|
+
#
|
|
312
|
+
# Each subsequent time that `t.log` is full, the log files are rotated:
|
|
313
|
+
#
|
|
314
|
+
# * `t.log.1` is removed.
|
|
315
|
+
# * +t.log.0 is renamed as `t.log.1`.
|
|
316
|
+
# * `t.log` is closed and renamed to `t.log.0`.
|
|
317
|
+
# * A new file `t.log` is opened.
|
|
318
|
+
#
|
|
319
|
+
#
|
|
320
|
+
# ### Periodic Rotation
|
|
321
|
+
#
|
|
322
|
+
# For periodic rotation, call Logger.new with:
|
|
323
|
+
#
|
|
324
|
+
# * Argument `logdev` as a file path.
|
|
325
|
+
# * Argument `shift_age` as a string period indicator.
|
|
326
|
+
#
|
|
327
|
+
#
|
|
328
|
+
# Examples:
|
|
329
|
+
#
|
|
330
|
+
# logger = Logger.new('t.log', 'daily') # Rotate log files daily.
|
|
331
|
+
# logger = Logger.new('t.log', 'weekly') # Rotate log files weekly.
|
|
332
|
+
# logger = Logger.new('t.log', 'monthly') # Rotate log files monthly.
|
|
333
|
+
#
|
|
334
|
+
# Example:
|
|
335
|
+
#
|
|
336
|
+
# logger = Logger.new('t.log', 'daily')
|
|
337
|
+
#
|
|
338
|
+
# When the given period expires:
|
|
339
|
+
#
|
|
340
|
+
# * The base log file, `t.log` is closed and renamed with a date-based suffix
|
|
341
|
+
# such as `t.log.20220509`.
|
|
342
|
+
# * A new log file `t.log` is opened.
|
|
343
|
+
# * Nothing is removed.
|
|
344
|
+
#
|
|
345
|
+
#
|
|
346
|
+
# The default format for the suffix is `'%Y%m%d'`, which produces a suffix
|
|
347
|
+
# similar to the one above. You can set a different format using create-time
|
|
348
|
+
# option `shift_period_suffix`; see details and suggestions at
|
|
349
|
+
# [Time#strftime](rdoc-ref:Time#strftime).
|
|
223
350
|
#
|
|
224
351
|
class Logger
|
|
225
352
|
interface _WriteCloser
|
|
@@ -237,51 +364,48 @@ class Logger
|
|
|
237
364
|
# rdoc-file=lib/logger.rb
|
|
238
365
|
# - <<(msg)
|
|
239
366
|
# -->
|
|
240
|
-
#
|
|
241
|
-
#
|
|
367
|
+
# Writes the given `msg` to the log with no formatting; returns the number of
|
|
368
|
+
# characters written, or `nil` if no log device exists:
|
|
369
|
+
#
|
|
370
|
+
# logger = Logger.new($stdout)
|
|
371
|
+
# logger << 'My message.' # => 10
|
|
372
|
+
#
|
|
373
|
+
# Output:
|
|
374
|
+
#
|
|
375
|
+
# My message.
|
|
242
376
|
#
|
|
243
377
|
def <<: (untyped msg) -> (untyped | nil)
|
|
244
378
|
|
|
245
379
|
# <!--
|
|
246
380
|
# rdoc-file=lib/logger.rb
|
|
247
|
-
# -
|
|
381
|
+
# - add(severity, message = nil, progname = nil) { || ... }
|
|
248
382
|
# -->
|
|
249
|
-
#
|
|
250
|
-
#
|
|
251
|
-
#
|
|
252
|
-
#
|
|
253
|
-
# `WARN`, `ERROR`, `FATAL`, or `UNKNOWN`.
|
|
254
|
-
# `message`
|
|
255
|
-
# : The log message. A String or Exception.
|
|
256
|
-
# `progname`
|
|
257
|
-
# : Program name string. Can be omitted. Treated as a message if no
|
|
258
|
-
# `message` and `block` are given.
|
|
259
|
-
# `block`
|
|
260
|
-
# : Can be omitted. Called to get a message string if `message` is nil.
|
|
383
|
+
# Creates a log entry, which may or may not be written to the log, depending on
|
|
384
|
+
# the entry's severity and on the log level. See [Log
|
|
385
|
+
# Level](rdoc-ref:Logger@Log+Level) and [Entries](rdoc-ref:Logger@Entries) for
|
|
386
|
+
# details.
|
|
261
387
|
#
|
|
388
|
+
# Examples:
|
|
262
389
|
#
|
|
263
|
-
#
|
|
390
|
+
# logger = Logger.new($stdout, progname: 'mung')
|
|
391
|
+
# logger.add(Logger::INFO)
|
|
392
|
+
# logger.add(Logger::ERROR, 'No good')
|
|
393
|
+
# logger.add(Logger::ERROR, 'No good', 'gnum')
|
|
264
394
|
#
|
|
265
|
-
#
|
|
266
|
-
# no message, and return `true`.
|
|
395
|
+
# Output:
|
|
267
396
|
#
|
|
268
|
-
#
|
|
397
|
+
# I, [2022-05-12T16:25:31.469726 #36328] INFO -- mung: mung
|
|
398
|
+
# E, [2022-05-12T16:25:55.349414 #36328] ERROR -- mung: No good
|
|
399
|
+
# E, [2022-05-12T16:26:35.841134 #36328] ERROR -- gnum: No good
|
|
269
400
|
#
|
|
270
|
-
#
|
|
271
|
-
# logging method. Users will be more inclined to use #debug, #info, #warn,
|
|
272
|
-
# #error, and #fatal.
|
|
401
|
+
# These convenience methods have implicit severity:
|
|
273
402
|
#
|
|
274
|
-
#
|
|
275
|
-
#
|
|
276
|
-
#
|
|
277
|
-
#
|
|
278
|
-
#
|
|
279
|
-
#
|
|
280
|
-
# ### Bugs
|
|
281
|
-
#
|
|
282
|
-
# * Logfile is not locked.
|
|
283
|
-
# * Append open does not need to lock file.
|
|
284
|
-
# * If the OS supports multi I/O, records possibly may be mixed.
|
|
403
|
+
# * #debug.
|
|
404
|
+
# * #info.
|
|
405
|
+
# * #warn.
|
|
406
|
+
# * #error.
|
|
407
|
+
# * #fatal.
|
|
408
|
+
# * #unknown.
|
|
285
409
|
#
|
|
286
410
|
def add: (Integer severity, ?untyped message, ?untyped progname) ?{ () -> untyped } -> true
|
|
287
411
|
|
|
@@ -289,7 +413,13 @@ class Logger
|
|
|
289
413
|
# rdoc-file=lib/logger.rb
|
|
290
414
|
# - close()
|
|
291
415
|
# -->
|
|
292
|
-
#
|
|
416
|
+
# Closes the logger; returns `nil`:
|
|
417
|
+
#
|
|
418
|
+
# logger = Logger.new('t.log')
|
|
419
|
+
# logger.close # => nil
|
|
420
|
+
# logger.info('foo') # Prints "log writing failed. closed stream"
|
|
421
|
+
#
|
|
422
|
+
# Related: Logger#reopen.
|
|
293
423
|
#
|
|
294
424
|
def close: () -> untyped
|
|
295
425
|
|
|
@@ -297,7 +427,7 @@ class Logger
|
|
|
297
427
|
# rdoc-file=lib/logger.rb
|
|
298
428
|
# - datetime_format()
|
|
299
429
|
# -->
|
|
300
|
-
# Returns the date format
|
|
430
|
+
# Returns the date-time format; see #datetime_format=.
|
|
301
431
|
#
|
|
302
432
|
def datetime_format: () -> String?
|
|
303
433
|
|
|
@@ -305,10 +435,13 @@ class Logger
|
|
|
305
435
|
# rdoc-file=lib/logger.rb
|
|
306
436
|
# - datetime_format=(datetime_format)
|
|
307
437
|
# -->
|
|
308
|
-
#
|
|
438
|
+
# Sets the date-time format.
|
|
439
|
+
#
|
|
440
|
+
# Argument `datetime_format` should be either of these:
|
|
309
441
|
#
|
|
310
|
-
#
|
|
311
|
-
#
|
|
442
|
+
# * A string suitable for use as a format for method
|
|
443
|
+
# [Time#strftime](rdoc-ref:Time#strftime).
|
|
444
|
+
# * `nil`: the logger uses `'%Y-%m-%dT%H:%M:%S.%6N'`.
|
|
312
445
|
#
|
|
313
446
|
def datetime_format=: (String datetime_format) -> String
|
|
314
447
|
| (nil datetime_format) -> nil
|
|
@@ -317,9 +450,7 @@ class Logger
|
|
|
317
450
|
# rdoc-file=lib/logger.rb
|
|
318
451
|
# - debug(progname = nil, &block)
|
|
319
452
|
# -->
|
|
320
|
-
#
|
|
321
|
-
#
|
|
322
|
-
# See #info for more information.
|
|
453
|
+
# Equivalent to calling #add with severity `Logger::DEBUG`.
|
|
323
454
|
#
|
|
324
455
|
def debug: (?untyped progname) ?{ () -> untyped } -> true
|
|
325
456
|
|
|
@@ -327,7 +458,8 @@ class Logger
|
|
|
327
458
|
# rdoc-file=lib/logger.rb
|
|
328
459
|
# - debug!()
|
|
329
460
|
# -->
|
|
330
|
-
# Sets the
|
|
461
|
+
# Sets the log level to Logger::DEBUG. See [Log
|
|
462
|
+
# Level](rdoc-ref:Logger@Log+Level).
|
|
331
463
|
#
|
|
332
464
|
def debug!: () -> Integer
|
|
333
465
|
|
|
@@ -335,8 +467,8 @@ class Logger
|
|
|
335
467
|
# rdoc-file=lib/logger.rb
|
|
336
468
|
# - debug?()
|
|
337
469
|
# -->
|
|
338
|
-
# Returns `true` if
|
|
339
|
-
#
|
|
470
|
+
# Returns `true` if the log level allows entries with severity Logger::DEBUG to
|
|
471
|
+
# be written, `false` otherwise. See [Log Level](rdoc-ref:Logger@Log+Level).
|
|
340
472
|
#
|
|
341
473
|
def debug?: () -> bool
|
|
342
474
|
|
|
@@ -344,9 +476,7 @@ class Logger
|
|
|
344
476
|
# rdoc-file=lib/logger.rb
|
|
345
477
|
# - error(progname = nil, &block)
|
|
346
478
|
# -->
|
|
347
|
-
#
|
|
348
|
-
#
|
|
349
|
-
# See #info for more information.
|
|
479
|
+
# Equivalent to calling #add with severity `Logger::ERROR`.
|
|
350
480
|
#
|
|
351
481
|
def error: (?untyped progname) ?{ () -> untyped } -> true
|
|
352
482
|
|
|
@@ -354,7 +484,8 @@ class Logger
|
|
|
354
484
|
# rdoc-file=lib/logger.rb
|
|
355
485
|
# - error!()
|
|
356
486
|
# -->
|
|
357
|
-
# Sets the
|
|
487
|
+
# Sets the log level to Logger::ERROR. See [Log
|
|
488
|
+
# Level](rdoc-ref:Logger@Log+Level).
|
|
358
489
|
#
|
|
359
490
|
def error!: () -> Integer
|
|
360
491
|
|
|
@@ -362,8 +493,8 @@ class Logger
|
|
|
362
493
|
# rdoc-file=lib/logger.rb
|
|
363
494
|
# - error?()
|
|
364
495
|
# -->
|
|
365
|
-
# Returns `true` if
|
|
366
|
-
#
|
|
496
|
+
# Returns `true` if the log level allows entries with severity Logger::ERROR to
|
|
497
|
+
# be written, `false` otherwise. See [Log Level](rdoc-ref:Logger@Log+Level).
|
|
367
498
|
#
|
|
368
499
|
def error?: () -> bool
|
|
369
500
|
|
|
@@ -371,9 +502,7 @@ class Logger
|
|
|
371
502
|
# rdoc-file=lib/logger.rb
|
|
372
503
|
# - fatal(progname = nil, &block)
|
|
373
504
|
# -->
|
|
374
|
-
#
|
|
375
|
-
#
|
|
376
|
-
# See #info for more information.
|
|
505
|
+
# Equivalent to calling #add with severity `Logger::FATAL`.
|
|
377
506
|
#
|
|
378
507
|
def fatal: (?untyped progname) ?{ () -> untyped } -> true
|
|
379
508
|
|
|
@@ -381,7 +510,8 @@ class Logger
|
|
|
381
510
|
# rdoc-file=lib/logger.rb
|
|
382
511
|
# - fatal!()
|
|
383
512
|
# -->
|
|
384
|
-
# Sets the
|
|
513
|
+
# Sets the log level to Logger::FATAL. See [Log
|
|
514
|
+
# Level](rdoc-ref:Logger@Log+Level).
|
|
385
515
|
#
|
|
386
516
|
def fatal!: () -> Integer
|
|
387
517
|
|
|
@@ -389,83 +519,85 @@ class Logger
|
|
|
389
519
|
# rdoc-file=lib/logger.rb
|
|
390
520
|
# - fatal?()
|
|
391
521
|
# -->
|
|
392
|
-
# Returns `true` if
|
|
393
|
-
#
|
|
522
|
+
# Returns `true` if the log level allows entries with severity Logger::FATAL to
|
|
523
|
+
# be written, `false` otherwise. See [Log Level](rdoc-ref:Logger@Log+Level).
|
|
394
524
|
#
|
|
395
525
|
def fatal?: () -> bool
|
|
396
526
|
|
|
397
527
|
# <!-- rdoc-file=lib/logger.rb -->
|
|
398
|
-
#
|
|
399
|
-
#
|
|
528
|
+
# Sets or retrieves the logger entry formatter proc.
|
|
529
|
+
#
|
|
530
|
+
# When `formatter` is `nil`, the logger uses Logger::Formatter.
|
|
400
531
|
#
|
|
401
|
-
# `
|
|
402
|
-
#
|
|
403
|
-
# `time`
|
|
404
|
-
# : A Time instance representing when the message was logged.
|
|
405
|
-
# `progname`
|
|
406
|
-
# : The #progname configured, or passed to the logger method.
|
|
407
|
-
# `msg`
|
|
408
|
-
# : The *Object* the user passed to the log message; not necessarily a String.
|
|
532
|
+
# When `formatter` is a proc, a new entry is formatted by the proc, which is
|
|
533
|
+
# called with four arguments:
|
|
409
534
|
#
|
|
535
|
+
# * `severity`: The severity of the entry.
|
|
536
|
+
# * `time`: A Time object representing the entry's timestamp.
|
|
537
|
+
# * `progname`: The program name for the entry.
|
|
538
|
+
# * `msg`: The message for the entry (string or string-convertible object).
|
|
410
539
|
#
|
|
411
|
-
#
|
|
412
|
-
#
|
|
540
|
+
#
|
|
541
|
+
# The proc should return a string containing the formatted entry.
|
|
542
|
+
#
|
|
543
|
+
# This custom formatter uses [String#dump](rdoc-ref:String#dump) to escape the
|
|
544
|
+
# message string:
|
|
545
|
+
#
|
|
546
|
+
# logger = Logger.new($stdout, progname: 'mung')
|
|
547
|
+
# original_formatter = logger.formatter || Logger::Formatter.new
|
|
548
|
+
# logger.formatter = proc { |severity, time, progname, msg|
|
|
549
|
+
# original_formatter.call(severity, time, progname, msg.dump)
|
|
550
|
+
# }
|
|
551
|
+
# logger.add(Logger::INFO, "hello \n ''")
|
|
552
|
+
# logger.add(Logger::INFO, "\f\x00\xff\\\"")
|
|
553
|
+
#
|
|
554
|
+
# Output:
|
|
555
|
+
#
|
|
556
|
+
# I, [2022-05-13T13:16:29.637488 #8492] INFO -- mung: "hello \n ''"
|
|
557
|
+
# I, [2022-05-13T13:16:29.637610 #8492] INFO -- mung: "\f\x00\xFF\\\""
|
|
413
558
|
#
|
|
414
559
|
def formatter: () -> (_Formatter | nil)
|
|
415
560
|
|
|
416
561
|
# <!-- rdoc-file=lib/logger.rb -->
|
|
417
|
-
#
|
|
418
|
-
# formatted message. The arguments are:
|
|
419
|
-
#
|
|
420
|
-
# `severity`
|
|
421
|
-
# : The Severity of the log message.
|
|
422
|
-
# `time`
|
|
423
|
-
# : A Time instance representing when the message was logged.
|
|
424
|
-
# `progname`
|
|
425
|
-
# : The #progname configured, or passed to the logger method.
|
|
426
|
-
# `msg`
|
|
427
|
-
# : The *Object* the user passed to the log message; not necessarily a String.
|
|
562
|
+
# Sets or retrieves the logger entry formatter proc.
|
|
428
563
|
#
|
|
564
|
+
# When `formatter` is `nil`, the logger uses Logger::Formatter.
|
|
429
565
|
#
|
|
430
|
-
#
|
|
431
|
-
#
|
|
566
|
+
# When `formatter` is a proc, a new entry is formatted by the proc, which is
|
|
567
|
+
# called with four arguments:
|
|
432
568
|
#
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
#
|
|
437
|
-
# rdoc-file=lib/logger.rb
|
|
438
|
-
# - info(message)
|
|
439
|
-
# - info(progname, &block)
|
|
440
|
-
# -->
|
|
441
|
-
# Log an `INFO` message.
|
|
569
|
+
# * `severity`: The severity of the entry.
|
|
570
|
+
# * `time`: A Time object representing the entry's timestamp.
|
|
571
|
+
# * `progname`: The program name for the entry.
|
|
572
|
+
# * `msg`: The message for the entry (string or string-convertible object).
|
|
442
573
|
#
|
|
443
|
-
# `message`
|
|
444
|
-
# : The message to log; does not need to be a String.
|
|
445
|
-
# `progname`
|
|
446
|
-
# : In the block form, this is the #progname to use in the log message. The
|
|
447
|
-
# default can be set with #progname=.
|
|
448
|
-
# `block`
|
|
449
|
-
# : Evaluates to the message to log. This is not evaluated unless the
|
|
450
|
-
# logger's level is sufficient to log the message. This allows you to
|
|
451
|
-
# create potentially expensive logging messages that are only called when
|
|
452
|
-
# the logger is configured to show them.
|
|
453
574
|
#
|
|
575
|
+
# The proc should return a string containing the formatted entry.
|
|
454
576
|
#
|
|
455
|
-
#
|
|
577
|
+
# This custom formatter uses [String#dump](rdoc-ref:String#dump) to escape the
|
|
578
|
+
# message string:
|
|
456
579
|
#
|
|
457
|
-
# logger.
|
|
458
|
-
#
|
|
459
|
-
# logger.
|
|
460
|
-
#
|
|
461
|
-
#
|
|
580
|
+
# logger = Logger.new($stdout, progname: 'mung')
|
|
581
|
+
# original_formatter = logger.formatter || Logger::Formatter.new
|
|
582
|
+
# logger.formatter = proc { |severity, time, progname, msg|
|
|
583
|
+
# original_formatter.call(severity, time, progname, msg.dump)
|
|
584
|
+
# }
|
|
585
|
+
# logger.add(Logger::INFO, "hello \n ''")
|
|
586
|
+
# logger.add(Logger::INFO, "\f\x00\xff\\\"")
|
|
462
587
|
#
|
|
463
|
-
#
|
|
464
|
-
# program name (which you can do with #progname= as well).
|
|
588
|
+
# Output:
|
|
465
589
|
#
|
|
466
|
-
#
|
|
590
|
+
# I, [2022-05-13T13:16:29.637488 #8492] INFO -- mung: "hello \n ''"
|
|
591
|
+
# I, [2022-05-13T13:16:29.637610 #8492] INFO -- mung: "\f\x00\xFF\\\""
|
|
467
592
|
#
|
|
468
|
-
|
|
593
|
+
def formatter=: (_Formatter) -> _Formatter
|
|
594
|
+
| (nil) -> nil
|
|
595
|
+
|
|
596
|
+
# <!--
|
|
597
|
+
# rdoc-file=lib/logger.rb
|
|
598
|
+
# - info(progname = nil, &block)
|
|
599
|
+
# -->
|
|
600
|
+
# Equivalent to calling #add with severity `Logger::INFO`.
|
|
469
601
|
#
|
|
470
602
|
def info: (?untyped progname) ?{ () -> untyped } -> true
|
|
471
603
|
|
|
@@ -473,7 +605,8 @@ class Logger
|
|
|
473
605
|
# rdoc-file=lib/logger.rb
|
|
474
606
|
# - info!()
|
|
475
607
|
# -->
|
|
476
|
-
# Sets the
|
|
608
|
+
# Sets the log level to Logger::INFO. See [Log
|
|
609
|
+
# Level](rdoc-ref:Logger@Log+Level).
|
|
477
610
|
#
|
|
478
611
|
def info!: () -> Integer
|
|
479
612
|
|
|
@@ -481,8 +614,8 @@ class Logger
|
|
|
481
614
|
# rdoc-file=lib/logger.rb
|
|
482
615
|
# - info?()
|
|
483
616
|
# -->
|
|
484
|
-
# Returns `true` if
|
|
485
|
-
#
|
|
617
|
+
# Returns `true` if the log level allows entries with severity Logger::INFO to
|
|
618
|
+
# be written, `false` otherwise. See [Log Level](rdoc-ref:Logger@Log+Level).
|
|
486
619
|
#
|
|
487
620
|
def info?: () -> bool
|
|
488
621
|
|
|
@@ -495,10 +628,17 @@ class Logger
|
|
|
495
628
|
# rdoc-file=lib/logger.rb
|
|
496
629
|
# - level=(severity)
|
|
497
630
|
# -->
|
|
498
|
-
#
|
|
631
|
+
# Sets the log level; returns `severity`. See [Log
|
|
632
|
+
# Level](rdoc-ref:Logger@Log+Level).
|
|
633
|
+
#
|
|
634
|
+
# Argument `severity` may be an integer, a string, or a symbol:
|
|
635
|
+
#
|
|
636
|
+
# logger.level = Logger::ERROR # => 3
|
|
637
|
+
# logger.level = 3 # => 3
|
|
638
|
+
# logger.level = 'error' # => "error"
|
|
639
|
+
# logger.level = :error # => :error
|
|
499
640
|
#
|
|
500
|
-
#
|
|
501
|
-
# : The Severity of the log message.
|
|
641
|
+
# Logger#sev_threshold= is an alias for Logger#level=.
|
|
502
642
|
#
|
|
503
643
|
def level=: (Integer | String | Symbol severity) -> Integer
|
|
504
644
|
|
|
@@ -521,20 +661,30 @@ class Logger
|
|
|
521
661
|
|
|
522
662
|
# <!--
|
|
523
663
|
# rdoc-file=lib/logger.rb
|
|
524
|
-
# -
|
|
525
|
-
# - Logger#reopen(logdev)
|
|
664
|
+
# - reopen(logdev = nil)
|
|
526
665
|
# -->
|
|
527
|
-
#
|
|
666
|
+
# Sets the logger's output stream:
|
|
528
667
|
#
|
|
529
|
-
# `logdev`
|
|
530
|
-
#
|
|
531
|
-
#
|
|
532
|
-
#
|
|
668
|
+
# * If `logdev` is `nil`, reopens the current output stream.
|
|
669
|
+
# * If `logdev` is a filepath, opens the indicated file for append.
|
|
670
|
+
# * If `logdev` is an IO stream (usually `$stdout`, `$stderr`, or an open File
|
|
671
|
+
# object), opens the stream for append.
|
|
533
672
|
#
|
|
534
673
|
#
|
|
535
|
-
#
|
|
674
|
+
# Example:
|
|
536
675
|
#
|
|
537
|
-
#
|
|
676
|
+
# logger = Logger.new('t.log')
|
|
677
|
+
# logger.add(Logger::ERROR, 'one')
|
|
678
|
+
# logger.close
|
|
679
|
+
# logger.add(Logger::ERROR, 'two') # Prints 'log writing failed. closed stream'
|
|
680
|
+
# logger.reopen
|
|
681
|
+
# logger.add(Logger::ERROR, 'three')
|
|
682
|
+
# logger.close
|
|
683
|
+
# File.readlines('t.log')
|
|
684
|
+
# # =>
|
|
685
|
+
# # ["# Logfile created on 2022-05-12 14:21:19 -0500 by logger.rb/v1.5.0\n",
|
|
686
|
+
# # "E, [2022-05-12T14:21:27.596726 #22428] ERROR -- : one\n",
|
|
687
|
+
# # "E, [2022-05-12T14:23:05.847241 #22428] ERROR -- : three\n"]
|
|
538
688
|
#
|
|
539
689
|
def reopen: () -> self
|
|
540
690
|
| (logdev?) -> self
|
|
@@ -555,10 +705,7 @@ class Logger
|
|
|
555
705
|
# rdoc-file=lib/logger.rb
|
|
556
706
|
# - unknown(progname = nil, &block)
|
|
557
707
|
# -->
|
|
558
|
-
#
|
|
559
|
-
# level is.
|
|
560
|
-
#
|
|
561
|
-
# See #info for more information.
|
|
708
|
+
# Equivalent to calling #add with severity `Logger::UNKNOWN`.
|
|
562
709
|
#
|
|
563
710
|
def unknown: (?untyped progname) ?{ () -> untyped } -> true
|
|
564
711
|
|
|
@@ -566,9 +713,7 @@ class Logger
|
|
|
566
713
|
# rdoc-file=lib/logger.rb
|
|
567
714
|
# - warn(progname = nil, &block)
|
|
568
715
|
# -->
|
|
569
|
-
#
|
|
570
|
-
#
|
|
571
|
-
# See #info for more information.
|
|
716
|
+
# Equivalent to calling #add with severity `Logger::WARN`.
|
|
572
717
|
#
|
|
573
718
|
def warn: (?untyped progname) ?{ () -> untyped } -> true
|
|
574
719
|
|
|
@@ -576,7 +721,8 @@ class Logger
|
|
|
576
721
|
# rdoc-file=lib/logger.rb
|
|
577
722
|
# - warn!()
|
|
578
723
|
# -->
|
|
579
|
-
# Sets the
|
|
724
|
+
# Sets the log level to Logger::WARN. See [Log
|
|
725
|
+
# Level](rdoc-ref:Logger@Log+Level).
|
|
580
726
|
#
|
|
581
727
|
def warn!: () -> Integer
|
|
582
728
|
|
|
@@ -584,8 +730,8 @@ class Logger
|
|
|
584
730
|
# rdoc-file=lib/logger.rb
|
|
585
731
|
# - warn?()
|
|
586
732
|
# -->
|
|
587
|
-
# Returns `true` if
|
|
588
|
-
#
|
|
733
|
+
# Returns `true` if the log level allows entries with severity Logger::WARN to
|
|
734
|
+
# be written, `false` otherwise. See [Log Level](rdoc-ref:Logger@Log+Level).
|
|
589
735
|
#
|
|
590
736
|
def warn?: () -> bool
|
|
591
737
|
|
|
@@ -607,44 +753,48 @@ class Logger
|
|
|
607
753
|
|
|
608
754
|
# <!--
|
|
609
755
|
# rdoc-file=lib/logger.rb
|
|
610
|
-
# - Logger.new(logdev, shift_age = 0, shift_size = 1048576)
|
|
611
|
-
# - Logger.new(logdev, shift_age = 'weekly')
|
|
612
|
-
# - Logger.new(logdev, level: :info)
|
|
613
|
-
# - Logger.new(logdev, progname: 'progname')
|
|
614
|
-
# - Logger.new(logdev, formatter: formatter)
|
|
615
|
-
# - Logger.new(logdev, datetime_format: '%Y-%m-%d %H:%M:%S')
|
|
756
|
+
# - Logger.new(logdev, shift_age = 0, shift_size = 1048576, **options)
|
|
616
757
|
# -->
|
|
617
|
-
#
|
|
618
|
-
#
|
|
619
|
-
#
|
|
620
|
-
#
|
|
621
|
-
#
|
|
622
|
-
#
|
|
623
|
-
#
|
|
624
|
-
#
|
|
625
|
-
#
|
|
626
|
-
#
|
|
627
|
-
#
|
|
628
|
-
#
|
|
629
|
-
#
|
|
630
|
-
#
|
|
631
|
-
# :
|
|
632
|
-
#
|
|
633
|
-
#
|
|
634
|
-
#
|
|
635
|
-
#
|
|
636
|
-
#
|
|
637
|
-
#
|
|
638
|
-
# `
|
|
639
|
-
#
|
|
640
|
-
#
|
|
641
|
-
# :
|
|
642
|
-
#
|
|
643
|
-
#
|
|
644
|
-
#
|
|
645
|
-
#
|
|
646
|
-
#
|
|
647
|
-
#
|
|
758
|
+
# With the single argument `logdev`, returns a new logger with all default
|
|
759
|
+
# options:
|
|
760
|
+
#
|
|
761
|
+
# Logger.new('t.log') # => #<Logger:0x000001e685dc6ac8>
|
|
762
|
+
#
|
|
763
|
+
# Argument `logdev` must be one of:
|
|
764
|
+
#
|
|
765
|
+
# * A string filepath: entries are to be written to the file at that path; if
|
|
766
|
+
# the file at that path exists, new entries are appended.
|
|
767
|
+
# * An IO stream (typically +$stdout+, +$stderr+. or an open file): entries
|
|
768
|
+
# are to be written to the given stream.
|
|
769
|
+
# * `nil` or `File::NULL`: no entries are to be written.
|
|
770
|
+
#
|
|
771
|
+
#
|
|
772
|
+
# Examples:
|
|
773
|
+
#
|
|
774
|
+
# Logger.new('t.log')
|
|
775
|
+
# Logger.new($stdout)
|
|
776
|
+
#
|
|
777
|
+
# The keyword options are:
|
|
778
|
+
#
|
|
779
|
+
# * `level`: sets the log level; default value is Logger::DEBUG. See [Log
|
|
780
|
+
# Level](rdoc-ref:Logger@Log+Level):
|
|
781
|
+
#
|
|
782
|
+
# Logger.new('t.log', level: Logger::ERROR)
|
|
783
|
+
#
|
|
784
|
+
# * `progname`: sets the default program name; default is `nil`. See [Program
|
|
785
|
+
# Name](rdoc-ref:Logger@Program+Name):
|
|
786
|
+
#
|
|
787
|
+
# Logger.new('t.log', progname: 'mung')
|
|
788
|
+
#
|
|
789
|
+
# * `formatter`: sets the entry formatter; default is `nil`. See
|
|
790
|
+
# [formatter=](Logger.html#attribute-i-formatter).
|
|
791
|
+
# * `datetime_format`: sets the format for entry timestamp; default is `nil`.
|
|
792
|
+
# See #datetime_format=.
|
|
793
|
+
# * `binmode`: sets whether the logger writes in binary mode; default is
|
|
794
|
+
# `false`.
|
|
795
|
+
# * `shift_period_suffix`: sets the format for the filename suffix for
|
|
796
|
+
# periodic log file rotation; default is `'%Y%m%d'`. See [Periodic
|
|
797
|
+
# Rotation](rdoc-ref:Logger@Periodic+Rotation).
|
|
648
798
|
#
|
|
649
799
|
def initialize: (logdev logdev, ?Numeric | String shift_age, ?Integer shift_size, ?shift_period_suffix: String, ?binmode: boolish, ?datetime_format: String, ?formatter: _Formatter, ?progname: String, ?level: Integer | String | Symbol) -> void
|
|
650
800
|
end
|