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
DEBUGentry. - 
  
    
      #debug?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    
Returns
trueif the current severity level allows for sendingDEBUGmessages. - 
  
    
      #delete_request_info  ⇒ RequestInfo 
    
    
      (also: #delete_trace_id)
    
  
  
  
  
  
  
  
  
  
    
Untrack the RequestInfo that's associated with current Thread.
 - 
  
    
      #error(message = nil) { ... } ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Log an
ERRORentry. - 
  
    
      #error?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    
Returns
trueif the current severity level allows for sendingERRORmessages. - 
  
    
      #fatal(message = nil) { ... } ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Log a
FATALentry. - 
  
    
      #fatal?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    
Returns
trueif the current severity level allows for sendingFATALmessages. - 
  
    
      #flush  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
No-op method.
 - 
  
    
      #info(message = nil) { ... } ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Log an
INFOentry. - 
  
    
      #info?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    
Returns
trueif the current severity level allows for sendingINFOmessages. - 
  
    
      #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
UNKNOWNentry. - 
  
    
      #unknown?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    
Returns
trueif the current severity level allows for sendingUNKNOWNmessages. - 
  
    
      #warn(message = nil) { ... } ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Log a
WARNentry. - 
  
    
      #warn?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    
Returns
trueif the current severity level allows for sendingWARNmessages. 
Constructor Details
#initialize(writer, log_name, resource, labels = nil) ⇒ Google::Cloud::Logging::Logger
Create a new Logger instance.
      163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 163 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.
      103 104 105  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 103 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.
      98 99 100  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 98 def formatter @formatter end  | 
  
#labels ⇒ Object (readonly)
The Google Cloud labels to write the log entry with.
      82 83 84  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 82 def labels @labels end  | 
  
#level ⇒ Object Also known as: sev_threshold, local_level
The logging severity threshold (e.g. Logger::INFO)
      86 87 88  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 86 def level @level end  | 
  
#log_name ⇒ Object (readonly) Also known as: progname
The Google Cloud log_name to write the log entry with.
      73 74 75  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 73 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.
      108 109 110  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 108 def project @project end  | 
  
#resource ⇒ Object (readonly)
The Google Cloud resource to write the log entry with.
      78 79 80  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 78 def resource @resource end  | 
  
#silencer ⇒ Object
Boolean flag that indicates whether this logger can be silenced or not.
      93 94 95  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 93 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.
      69 70 71  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 69 def writer @writer end  | 
  
Instance Method Details
#<<(msg) ⇒ Object
Logs the given message at UNKNOWN severity.
      327 328 329 330  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 327 def << msg unknown msg self end  | 
  
#add(severity, message = nil, progname = nil) { ... } ⇒ Object Also known as: log
      304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 304 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.
      451 452 453 454 455 456 457 458 459 460 461 462 463 464  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 451 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
      432 433 434  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 432 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.
      409 410 411 412  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 409 def close @closed = true self end  | 
  
#debug(message = nil) { ... } ⇒ Object
Log a DEBUG entry.
      191 192 193 194 195 196 197  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 191 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.
      335 336 337  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 335 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
      481 482 483  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 481 def delete_request_info @request_info.delete current_thread_id end  | 
  
#error(message = nil) { ... } ⇒ Object
Log an ERROR entry.
      245 246 247 248 249 250 251  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 245 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.
      356 357 358  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 356 def error? @level <= ::Logger::ERROR end  | 
  
#fatal(message = nil) { ... } ⇒ Object
Log a FATAL entry.
      263 264 265 266 267 268 269  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 263 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.
      363 364 365  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 363 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.
      492 493 494  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 492 def flush self end  | 
  
#info(message = nil) { ... } ⇒ Object
Log an INFO entry.
      209 210 211 212 213 214 215  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 209 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.
      342 343 344  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 342 def info? @level <= ::Logger::INFO end  | 
  
#progname=(name) ⇒ Object
This logger treats progname as an alias for log_name.
      112 113 114  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 112 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.
      421 422 423 424  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 421 def reopen _logdev = nil @closed = false self end  | 
  
#request_info ⇒ RequestInfo?
Get the request data for the current Thread
      472 473 474  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 472 def request_info @request_info[current_thread_id] end  | 
  
#silence(temp_level = ::Logger::ERROR) ⇒ Object
Filter out low severity messages within block.
      518 519 520 521 522 523 524 525 526 527 528 529 530 531  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 518 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.
      123 124 125  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 123 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.
      282 283 284 285 286 287 288  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 282 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.
      370 371 372  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 370 def unknown? @level <= ::Logger::UNKNOWN end  | 
  
#warn(message = nil) { ... } ⇒ Object
Log a WARN entry.
      227 228 229 230 231 232 233  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 227 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.
      349 350 351  | 
    
      # File 'lib/google/cloud/logging/logger.rb', line 349 def warn? @level <= ::Logger::WARN end  |