class OpenShift::Runtime::NodeLogger::SplitTraceLogger

This NodeLogger implementation is backed by the Ruby stdlib logger class, and uses a separate logger instance for trace logging in order to physically segregate messages at the trace level.

The logger uses the following config keys:

PLATFORM_LOG_FILE        - The absolute path to the primary log file (default: /var/log/openshift/node/platform.log)
PLATFORM_LOG_LEVEL       - The log level for the primary logger (default: DEBUG)
PLATFORM_TRACE_LOG_FILE  - The absolute path to the trace log file (default: /var/log/openshift/node/platform-trace.log)
PLATFORM_TRACE_LOG_LEVEL - The log level for the trace logger (default: INFO)

Note: File IO for the underlying loggers is synchronous.

Constants

PROFILES

Public Class Methods

new(config, context) click to toggle source
# File lib/openshift-origin-node/utils/logger/split_trace_logger.rb, line 53
def initialize(config, context)
  @config = config
  @context = context

  reinitialize
end

Public Instance Methods

debug(*args, &block) click to toggle source
# File lib/openshift-origin-node/utils/logger/split_trace_logger.rb, line 69
def debug(*args, &block)
  @logger.info(*args, &block)
end
error(*args, &block) click to toggle source
# File lib/openshift-origin-node/utils/logger/split_trace_logger.rb, line 77
def error(*args, &block)
  @logger.error(*args, &block)
end
fatal(*args, &block) click to toggle source
# File lib/openshift-origin-node/utils/logger/split_trace_logger.rb, line 81
def fatal(*args, &block)
  @logger.fatal(*args, &block)
end
info(*args, &block) click to toggle source
# File lib/openshift-origin-node/utils/logger/split_trace_logger.rb, line 65
def info(*args, &block)
  @logger.info(*args, &block)
end
reinitialize() click to toggle source
# File lib/openshift-origin-node/utils/logger/split_trace_logger.rb, line 60
def reinitialize
  @logger = build_logger(PROFILES[:standard])
  @trace_logger = build_logger(PROFILES[:trace])
end
trace(*args, &block) click to toggle source
# File lib/openshift-origin-node/utils/logger/split_trace_logger.rb, line 85
def trace(*args, &block)
  @trace_logger.info(*args, &block)
end
warn(*args, &block) click to toggle source
# File lib/openshift-origin-node/utils/logger/split_trace_logger.rb, line 73
def warn(*args, &block)
  @logger.warn(*args, &block)
end

Private Instance Methods

build_logger(profile) click to toggle source
# File lib/openshift-origin-node/utils/logger/split_trace_logger.rb, line 92
def build_logger(profile)
  begin
    # Use defaults
    log_file  = profile[:default_file]
    log_level = profile[:default_level]

    # Override defaults with configs if possible
    begin
      config_log_file  = @config.get(profile[:file_config])
      config_log_level = @config.get(profile[:level_config])

      if config_log_level && Logger::Severity.const_defined?(config_log_level)
        log_level = Logger::Severity.const_get(config_log_level)
      end

      if config_log_file
        log_file = config_log_file
      end
    rescue => e
      # just use the defaults
      Logger.new(STDERR).error { "Failed to apply logging configuration #{profile}: #{e.message}" }
    end

    FileUtils.mkpath(File.dirname(log_file)) unless File.exist? File.dirname(log_file)

    orig_umask = File.umask(0)
    file = File.open(log_file, File::WRONLY | File::APPEND| File::CREAT, 0660)
    File.umask(orig_umask)

    file.sync = true

    logger       = Logger.new(file, 5, 10 * 1024 * 1024)
    logger.level = log_level

    logger.formatter = proc do |severity, datetime, progname, msg|
      "#{datetime.strftime("%B %d %H:%M:%S")} #{severity} #{msg}\n"
    end

    logger
  rescue Exception => e
    # If all else fails, use a STDOUT logger
    Logger.new(STDERR).error { "Failed to create logger; falling back to STDOUT: #{e.message}" }
    Logger.new(STDOUT)
  end
end