Class: Kitchen::Logger::StructuredLogdevLogger

Inherits:
Object
  • Object
show all
Includes:
Logger::Severity
Defined in:
lib/kitchen/logger.rb

Overview

Internal class that emits one JSON object per log event.

Constant Summary collapse

SEVERITY_NAMES =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

Maps stdlib Logger severity constants to their lowercase string names as they appear in emitted JSON events.

Returns:

  • (Hash{Integer => String})

    severity constant to name mapping

{
  DEBUG => "debug",
  INFO => "info",
  WARN => "warn",
  ERROR => "error",
  FATAL => "fatal",
  UNKNOWN => "unknown",
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(logdev, metadata_provider) ⇒ StructuredLogdevLogger

Returns a new instance of StructuredLogdevLogger.



652
653
654
655
656
657
658
659
# File 'lib/kitchen/logger.rb', line 652

def initialize(logdev, )
  @logdev = logdev
  @metadata_provider = 
  @level = INFO
  @progname = "Kitchen"
  @sequence = 0
  @mutex = Mutex.new
end

Instance Attribute Details

#datetime_formatObject

Returns the value of attribute datetime_format.



650
651
652
# File 'lib/kitchen/logger.rb', line 650

def datetime_format
  @datetime_format
end

#levelObject

Returns the value of attribute level.



648
649
650
# File 'lib/kitchen/logger.rb', line 648

def level
  @level
end

#prognameObject

Returns the value of attribute progname.



649
650
651
# File 'lib/kitchen/logger.rb', line 649

def progname
  @progname
end

Instance Method Details

#<<(msg) ⇒ void

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

This method returns an undefined value.

Appends raw stream output, emitting a structured event per complete line.

Parameters:

  • msg (String)

    a chunk of stream output



690
691
692
# File 'lib/kitchen/logger.rb', line 690

def <<(msg)
  line_buffer << msg
end

#add(severity, message = nil, progname = nil) { ... } ⇒ true

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Writes a log event if the given severity meets the current level.

Parameters:

  • severity (Integer)

    a stdlib Logger severity constant

  • message (#to_s, nil) (defaults to: nil)

    the message to log; when nil the block's value is used, falling back to progname

  • progname (#to_s, nil) (defaults to: nil)

    used as the message when both message and a block are absent

Yields:

  • evaluates to the message to log, only when the severity is high enough to be recorded

Returns:

  • (true)

    always, once the event has been considered



672
673
674
675
676
677
678
679
680
681
682
# File 'lib/kitchen/logger.rb', line 672

def add(severity, message = nil, progname = nil)
  severity ||= UNKNOWN
  return true if severity < level

  message = if message.nil?
              block_given? ? yield : progname
            else
              message
            end
  write_event(severity, message, "log")
end

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

This method returns an undefined value.

Writes a banner event at info severity.

Parameters:

  • msg (#to_s, nil) (defaults to: nil)

    the message to log; when nil the block's value is used

Yields:

  • evaluates to the message to log



701
702
703
704
# File 'lib/kitchen/logger.rb', line 701

def banner(msg = nil)
  message = block_given? ? yield : msg
  write_event(INFO, message, "banner") unless INFO < level
end

#closevoid

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

This method returns an undefined value.

Closes the underlying log device if it is open and supports closing.



808
809
810
811
812
813
814
815
816
# File 'lib/kitchen/logger.rb', line 808

def close
  return unless @logdev.respond_to?(:close)

  if @logdev.respond_to?(:closed?)
    @logdev.close unless @logdev.closed?
  else
    @logdev.close
  end
end

#debug(msg = nil) { ... } ⇒ true

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Writes a log event at debug severity.

Parameters:

  • msg (#to_s, nil) (defaults to: nil)

    the message to log; when nil the block's value is used

Yields:

  • evaluates to the message to log

Returns:

  • (true)


725
726
727
# File 'lib/kitchen/logger.rb', line 725

def debug(msg = nil, &block)
  add(DEBUG, msg, nil, &block)
end

#debug?Boolean

Returns:

  • (Boolean)


784
785
786
# File 'lib/kitchen/logger.rb', line 784

def debug?
  level <= DEBUG
end

#error(msg = nil) { ... } ⇒ true

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Writes a log event at error severity.

Parameters:

  • msg (#to_s, nil) (defaults to: nil)

    the message to log; when nil the block's value is used

Yields:

  • evaluates to the message to log

Returns:

  • (true)


758
759
760
# File 'lib/kitchen/logger.rb', line 758

def error(msg = nil, &block)
  add(ERROR, msg, nil, &block)
end

#error?Boolean

Returns:

  • (Boolean)


796
797
798
# File 'lib/kitchen/logger.rb', line 796

def error?
  level <= ERROR
end

#fatal(msg = nil) { ... } ⇒ true

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Writes a log event at fatal severity.

Parameters:

  • msg (#to_s, nil) (defaults to: nil)

    the message to log; when nil the block's value is used

Yields:

  • evaluates to the message to log

Returns:

  • (true)


769
770
771
# File 'lib/kitchen/logger.rb', line 769

def fatal(msg = nil, &block)
  add(FATAL, msg, nil, &block)
end

#fatal?Boolean

Returns:

  • (Boolean)


800
801
802
# File 'lib/kitchen/logger.rb', line 800

def fatal?
  level <= FATAL
end

#info(msg = nil) { ... } ⇒ true

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Writes a log event at info severity.

Parameters:

  • msg (#to_s, nil) (defaults to: nil)

    the message to log; when nil the block's value is used

Yields:

  • evaluates to the message to log

Returns:

  • (true)


736
737
738
# File 'lib/kitchen/logger.rb', line 736

def info(msg = nil, &block)
  add(INFO, msg, nil, &block)
end

#info?Boolean

Returns:

  • (Boolean)


788
789
790
# File 'lib/kitchen/logger.rb', line 788

def info?
  level <= INFO
end

#stream(severity, msg) ⇒ void

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

This method returns an undefined value.

Writes a stream event at the given severity.

Parameters:

  • severity (Integer, Symbol)

    a stdlib Logger severity constant or its symbol name

  • msg (#to_s)

    the message to log



713
714
715
716
# File 'lib/kitchen/logger.rb', line 713

def stream(severity, msg)
  severity = severity_const(severity)
  write_event(severity, msg, "stream") unless severity < level
end

#unknown(msg = nil) { ... } ⇒ true

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Writes a log event at unknown severity.

Parameters:

  • msg (#to_s, nil) (defaults to: nil)

    the message to log; when nil the block's value is used

Yields:

  • evaluates to the message to log

Returns:

  • (true)


780
781
782
# File 'lib/kitchen/logger.rb', line 780

def unknown(msg = nil, &block)
  add(UNKNOWN, msg, nil, &block)
end

#warn(msg = nil) { ... } ⇒ true

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Writes a log event at warn severity.

Parameters:

  • msg (#to_s, nil) (defaults to: nil)

    the message to log; when nil the block's value is used

Yields:

  • evaluates to the message to log

Returns:

  • (true)


747
748
749
# File 'lib/kitchen/logger.rb', line 747

def warn(msg = nil, &block)
  add(WARN, msg, nil, &block)
end

#warn?Boolean

Returns:

  • (Boolean)


792
793
794
# File 'lib/kitchen/logger.rb', line 792

def warn?
  level <= WARN
end