Class: Google::Cloud::Logging::Logger
- Inherits:
-
Object
- Object
- Google::Cloud::Logging::Logger
- Defined in:
- lib/google/cloud/logging/logger.rb
Overview
Logger
An API-compatible replacement for ruby's Logger that logs to the Stackdriver Logging Service.
Defined Under Namespace
Classes: RequestInfo
Instance Attribute Summary collapse
-
#datetime_format ⇒ Object
This logger does not use a formatter, but it implements this attribute for API compatibility with the standard Logger.
-
#formatter ⇒ Object
This logger does not use a formatter, but it provides a default Logger::Formatter for API compatibility with the standard Logger.
-
#labels ⇒ Object
readonly
The Google Cloud labels to write the log entry with.
-
#level ⇒ Object
(also: #sev_threshold, #local_level)
The logging severity threshold (e.g.
Logger::INFO
). -
#log_name ⇒ Object
(also: #progname)
readonly
The Google Cloud log_name to write the log entry with.
-
#project ⇒ Object
The project ID this logger is sending data to.
-
#resource ⇒ Object
readonly
The Google Cloud resource to write the log entry with.
-
#silencer ⇒ Object
Boolean flag that indicates whether this logger can be silenced or not.
-
#writer ⇒ Object
readonly
The Google Cloud writer object that calls to #write_entries are made on.
Instance Method Summary collapse
-
#<<(msg) ⇒ Object
Logs the given message at UNKNOWN severity.
-
#add(severity, message = nil, progname = nil) { ... } ⇒ Object
(also: #log)
Log a message if the given severity is high enough.
-
#add_request_info(info: nil, env: nil, trace_id: nil, log_name: nil) ⇒ Object
Associate request data with the current Thread.
-
#add_trace_id(trace_id) ⇒ Object
deprecated
Deprecated.
Use add_request_info
-
#close ⇒ Object
Close the logging "device".
-
#debug(message = nil) { ... } ⇒ Object
Log a
DEBUG
entry. -
#debug? ⇒ Boolean
Returns
true
if the current severity level allows for sendingDEBUG
messages. -
#delete_request_info ⇒ RequestInfo
(also: #delete_trace_id)
Untrack the RequestInfo that's associated with current Thread.
-
#error(message = nil) { ... } ⇒ Object
Log an
ERROR
entry. -
#error? ⇒ Boolean
Returns
true
if the current severity level allows for sendingERROR
messages. -
#fatal(message = nil) { ... } ⇒ Object
Log a
FATAL
entry. -
#fatal? ⇒ Boolean
Returns
true
if the current severity level allows for sendingFATAL
messages. -
#flush ⇒ Object
No-op method.
-
#info(message = nil) { ... } ⇒ Object
Log an
INFO
entry. -
#info? ⇒ Boolean
Returns
true
if the current severity level allows for sendingINFO
messages. -
#initialize(writer, log_name, resource, labels = nil) ⇒ Google::Cloud::Logging::Logger
constructor
Create a new Logger instance.
-
#progname=(name) ⇒ Object
This logger treats progname as an alias for log_name.
-
#reopen(_logdev = nil) ⇒ Object
Re-enable logging if the logger has been closed.
-
#request_info ⇒ RequestInfo?
Get the request data for the current Thread.
-
#silence(temp_level = ::Logger::ERROR) ⇒ Object
Filter out low severity messages within block.
-
#trace_ids ⇒ Object
deprecated
Deprecated.
Use request_info
-
#unknown(message = nil) { ... } ⇒ Object
Log an
UNKNOWN
entry. -
#unknown? ⇒ Boolean
Returns
true
if the current severity level allows for sendingUNKNOWN
messages. -
#warn(message = nil) { ... } ⇒ Object
Log a
WARN
entry. -
#warn? ⇒ Boolean
Returns
true
if the current severity level allows for sendingWARN
messages.
Constructor Details
#initialize(writer, log_name, resource, labels = nil) ⇒ Google::Cloud::Logging::Logger
Create a new Logger instance.
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
# File 'lib/google/cloud/logging/logger.rb', line 149 def initialize writer, log_name, resource, labels = nil @writer = writer @log_name = log_name @resource = resource @labels = labels || {} @level = 0 # DEBUG is the default behavior @request_info = {} @closed = false # Unused, but present for API compatibility @formatter = ::Logger::Formatter.new @datetime_format = "" @silencer = true # The writer is usually a Project or AsyncWriter. logging = @writer.respond_to?(:logging) ? @writer.logging : @writer @project = logging.project if logging.respond_to? :project end |
Instance Attribute Details
#datetime_format ⇒ Object
This logger does not use a formatter, but it implements this attribute for API compatibility with the standard Logger.
89 90 91 |
# File 'lib/google/cloud/logging/logger.rb', line 89 def datetime_format @datetime_format end |
#formatter ⇒ Object
This logger does not use a formatter, but it provides a default Logger::Formatter for API compatibility with the standard Logger.
84 85 86 |
# File 'lib/google/cloud/logging/logger.rb', line 84 def formatter @formatter end |
#labels ⇒ Object (readonly)
The Google Cloud labels to write the log entry with.
68 69 70 |
# File 'lib/google/cloud/logging/logger.rb', line 68 def labels @labels end |
#level ⇒ Object Also known as: sev_threshold, local_level
The logging severity threshold (e.g. Logger::INFO
)
72 73 74 |
# File 'lib/google/cloud/logging/logger.rb', line 72 def level @level end |
#log_name ⇒ Object (readonly) Also known as: progname
The Google Cloud log_name to write the log entry with.
59 60 61 |
# File 'lib/google/cloud/logging/logger.rb', line 59 def log_name @log_name end |
#project ⇒ Object
The project ID this logger is sending data to. If set, this value is used to set the trace field of log entries.
94 95 96 |
# File 'lib/google/cloud/logging/logger.rb', line 94 def project @project end |
#resource ⇒ Object (readonly)
The Google Cloud resource to write the log entry with.
64 65 66 |
# File 'lib/google/cloud/logging/logger.rb', line 64 def resource @resource end |
#silencer ⇒ Object
Boolean flag that indicates whether this logger can be silenced or not.
79 80 81 |
# File 'lib/google/cloud/logging/logger.rb', line 79 def silencer @silencer end |
#writer ⇒ Object (readonly)
The Google Cloud writer object that calls to #write_entries are made on. Either an AsyncWriter or Project object.
55 56 57 |
# File 'lib/google/cloud/logging/logger.rb', line 55 def writer @writer end |
Instance Method Details
#<<(msg) ⇒ Object
Logs the given message at UNKNOWN severity.
313 314 315 316 |
# File 'lib/google/cloud/logging/logger.rb', line 313 def << msg unknown msg self end |
#add(severity, message = nil, progname = nil) { ... } ⇒ Object Also known as: log
290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 |
# File 'lib/google/cloud/logging/logger.rb', line 290 def add severity, = nil, progname = nil severity = derive_severity(severity) || ::Logger::UNKNOWN return true if severity < @level if .nil? if block_given? = yield else = progname # progname = nil # TODO: Figure out what to do with the progname end end write_entry severity, unless @closed true end |
#add_request_info(info: nil, env: nil, trace_id: nil, log_name: nil) ⇒ Object
Associate request data with the current Thread. You may provide either the individual pieces of data (trace ID, log name) or a populated RequestInfo object.
435 436 437 438 439 440 441 442 443 444 445 446 447 448 |
# File 'lib/google/cloud/logging/logger.rb', line 435 def add_request_info info: nil, env: nil, trace_id: nil, log_name: nil info ||= RequestInfo.new trace_id, log_name, env @request_info[current_thread_id] = info # Start removing old entries if hash gets too large. # This should never happen, because middleware should automatically # remove entries when a request is finished @request_info.shift while @request_info.size > 10_000 info end |
#add_trace_id(trace_id) ⇒ Object
Use add_request_info
Track a given trace_id by associating it with the current Thread
416 417 418 |
# File 'lib/google/cloud/logging/logger.rb', line 416 def add_trace_id trace_id add_request_id trace_id: trace_id end |
#close ⇒ Object
Close the logging "device". This effectively disables logging from this logger; any further log messages will be silently ignored. The logger may be re-enabled by calling #reopen.
393 394 395 396 |
# File 'lib/google/cloud/logging/logger.rb', line 393 def close @closed = true self end |
#debug(message = nil) { ... } ⇒ Object
Log a DEBUG
entry.
177 178 179 180 181 182 183 |
# File 'lib/google/cloud/logging/logger.rb', line 177 def debug = nil, &block if block_given? add ::Logger::DEBUG, nil, , &block else add ::Logger::DEBUG, end end |
#debug? ⇒ Boolean
Returns true
if the current severity level allows for sending
DEBUG
messages.
321 322 323 |
# File 'lib/google/cloud/logging/logger.rb', line 321 def debug? @level <= ::Logger::DEBUG end |
#delete_request_info ⇒ RequestInfo Also known as: delete_trace_id
Untrack the RequestInfo that's associated with current Thread
465 466 467 |
# File 'lib/google/cloud/logging/logger.rb', line 465 def delete_request_info @request_info.delete current_thread_id end |
#error(message = nil) { ... } ⇒ Object
Log an ERROR
entry.
231 232 233 234 235 236 237 |
# File 'lib/google/cloud/logging/logger.rb', line 231 def error = nil, &block if block_given? add ::Logger::ERROR, nil, , &block else add ::Logger::ERROR, end end |
#error? ⇒ Boolean
Returns true
if the current severity level allows for sending
ERROR
messages.
342 343 344 |
# File 'lib/google/cloud/logging/logger.rb', line 342 def error? @level <= ::Logger::ERROR end |
#fatal(message = nil) { ... } ⇒ Object
Log a FATAL
entry.
249 250 251 252 253 254 255 |
# File 'lib/google/cloud/logging/logger.rb', line 249 def fatal = nil, &block if block_given? add ::Logger::FATAL, nil, , &block else add ::Logger::FATAL, end end |
#fatal? ⇒ Boolean
Returns true
if the current severity level allows for sending
FATAL
messages.
349 350 351 |
# File 'lib/google/cloud/logging/logger.rb', line 349 def fatal? @level <= ::Logger::FATAL end |
#flush ⇒ Object
No-op method. Created to match the spec of ActiveSupport::Logger#flush method when used in Rails application.
476 477 478 |
# File 'lib/google/cloud/logging/logger.rb', line 476 def flush self end |
#info(message = nil) { ... } ⇒ Object
Log an INFO
entry.
195 196 197 198 199 200 201 |
# File 'lib/google/cloud/logging/logger.rb', line 195 def info = nil, &block if block_given? add ::Logger::INFO, nil, , &block else add ::Logger::INFO, end end |
#info? ⇒ Boolean
Returns true
if the current severity level allows for sending INFO
messages.
328 329 330 |
# File 'lib/google/cloud/logging/logger.rb', line 328 def info? @level <= ::Logger::INFO end |
#progname=(name) ⇒ Object
This logger treats progname as an alias for log_name.
98 99 100 |
# File 'lib/google/cloud/logging/logger.rb', line 98 def progname= name @log_name = name end |
#reopen(_logdev = nil) ⇒ Object
Re-enable logging if the logger has been closed.
Note that this method accepts a "logdev" argument for compatibility with the standard Ruby Logger class; however, this argument is ignored because this logger does not use a log device.
405 406 407 408 |
# File 'lib/google/cloud/logging/logger.rb', line 405 def reopen _logdev = nil @closed = false self end |
#request_info ⇒ RequestInfo?
Get the request data for the current Thread
456 457 458 |
# File 'lib/google/cloud/logging/logger.rb', line 456 def request_info @request_info[current_thread_id] end |
#silence(temp_level = ::Logger::ERROR) ⇒ Object
Filter out low severity messages within block.
502 503 504 505 506 507 508 509 510 511 512 513 514 515 |
# File 'lib/google/cloud/logging/logger.rb', line 502 def silence temp_level = ::Logger::ERROR if silencer begin old_level = level self.level = temp_level yield self ensure self.level = old_level end else yield self end end |
#trace_ids ⇒ Object
Use request_info
A Hash of Thread IDs to Stackdriver request trace ID. The Stackdriver trace ID is a shared request identifier across all Stackdriver services.
109 110 111 |
# File 'lib/google/cloud/logging/logger.rb', line 109 def trace_ids @request_info.inject({}) { |r, (k, v)| r[k] = v.trace_id } end |
#unknown(message = nil) { ... } ⇒ Object
Log an UNKNOWN
entry. This will be printed no matter what the
logger's current severity level is.
268 269 270 271 272 273 274 |
# File 'lib/google/cloud/logging/logger.rb', line 268 def unknown = nil, &block if block_given? add ::Logger::UNKNOWN, nil, , &block else add ::Logger::UNKNOWN, end end |
#unknown? ⇒ Boolean
Returns true
if the current severity level allows for sending
UNKNOWN
messages.
356 357 358 |
# File 'lib/google/cloud/logging/logger.rb', line 356 def unknown? @level <= ::Logger::UNKNOWN end |
#warn(message = nil) { ... } ⇒ Object
Log a WARN
entry.
213 214 215 216 217 218 219 |
# File 'lib/google/cloud/logging/logger.rb', line 213 def warn = nil, &block if block_given? add ::Logger::WARN, nil, , &block else add ::Logger::WARN, end end |
#warn? ⇒ Boolean
Returns true
if the current severity level allows for sending WARN
messages.
335 336 337 |
# File 'lib/google/cloud/logging/logger.rb', line 335 def warn? @level <= ::Logger::WARN end |