Class: Longleaf::Logging::RedirectingLogger

Inherits:
Object
  • Object
show all
Defined in:
lib/longleaf/logging/redirecting_logger.rb

Overview

Logger which directs messages to stdout and/or stderr, depending on the nature of the message. Status logging, which includes standard logger methods, goes to STDERR. Operation success and failure messages go to STDOUT, and to STDERR at info level.

Instance Method Summary collapse

Constructor Details

#initialize(failure_only: false, log_level: 'WARN', log_format: nil, datetime_format: nil) ⇒ RedirectingLogger

Returns a new instance of RedirectingLogger

Parameters:

  • failure_only (Boolean)

    If set to true, only failure messages will be output to STDOUT

  • log_level (String)

    logger level used for output to STDERR

  • log_format (String)

    format string for log entries to STDERR. There are 4 variables available for inclusion in the output: severity, datetime, progname, msg. Variables must be wrapped in %{}.

  • datetime_format (String)

    datetime formatting string used for logger dates appearing in STDERR.



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/longleaf/logging/redirecting_logger.rb', line 14

def initialize(failure_only: false, log_level: 'WARN', log_format: nil, datetime_format: nil)
  @stderr_log = Logger.new($stderr)
  @stderr_log.level = log_level
  @stderr_log.datetime_format = datetime_format
  @log_format = log_format
  if @log_format.nil?
    @stderr_log.formatter = proc do |severity, datetime, progname, msg|
      formatted_date = @stderr_log.datetime_format.nil? ? datetime : datetime.strftime(datetime_format)
      "#{severity} [#{formatted_date}]: #{msg}\n"
    end
  elsif @log_format.is_a?(String)
    @stderr_log.formatter = proc do |severity, datetime, progname, msg|
      # Make sure the format ends with a newline
      @log_format = @log_format + "\n" unless @log_format.end_with?("\n")

      formatted_date = @stderr_log.datetime_format.nil? ? datetime : datetime.strftime(datetime_format)
      @log_format % { :severity => severity, :datetime => formatted_date, :progname => progname, :msg => msg }
    end
  end

  @stdout_log = Logger.new($stdout)
  @stdout_log.formatter = proc do |severity, datetime, progname, msg|
    "#{msg}\n"
  end
  if failure_only
    @stdout_log.level = 'warn'
  else
    @stdout_log.level = 'info'
  end
end

Instance Method Details

#debug(progname = nil, &block) ⇒ Object



45
46
47
# File 'lib/longleaf/logging/redirecting_logger.rb', line 45

def debug(progname = nil, &block)
  @stderr_log.debug(progname, &block)
end

#error(progname = nil, &block) ⇒ Object



57
58
59
# File 'lib/longleaf/logging/redirecting_logger.rb', line 57

def error(progname = nil, &block)
  @stderr_log.error(progname, &block)
end

#failure(eventOrMessage, file_name = nil, message = nil, service = nil, error: nil) ⇒ Object

Logs a failure message to STDOUT, as well as STDERR at info level. If an error was provided, it is logged to STDERR at error level.

Parameters:

  • eventOrMessage (String)

    name of the preservation event which failed, or the message to output if it is the only parameter.

  • file_name (String) (defaults to: nil)

    file name which is the subject of this message.

  • message (String) (defaults to: nil)

    descriptive message to accompany this output

  • service (String) (defaults to: nil)

    name of the service which executed.

  • error (Error)

    error which occurred



88
89
90
91
92
93
94
95
# File 'lib/longleaf/logging/redirecting_logger.rb', line 88

def failure(eventOrMessage, file_name = nil, message = nil, service = nil, error: nil)
  text = outcome_text('FAILURE', eventOrMessage, file_name, message, service, error)
  @stdout_log.warn(text)

  @stderr_log.info(text)
  @stderr_log.error("#{error.message}") unless error.nil?
  @stderr_log.error("#{error.backtrace}") unless error.nil? || error.backtrace.nil?
end

#fatal(progname = nil, &block) ⇒ Object



61
62
63
# File 'lib/longleaf/logging/redirecting_logger.rb', line 61

def fatal(progname = nil, &block)
  @stderr_log.fatal(progname, &block)
end

#info(progname = nil, &block) ⇒ Object



49
50
51
# File 'lib/longleaf/logging/redirecting_logger.rb', line 49

def info(progname = nil, &block)
  @stderr_log.info(progname, &block)
end

#outcome(outcome, eventOrMessage, file_name = nil, message = nil, service = nil, error = nil) ⇒ Object

Logs an outcome message to STDOUT, as well as STDERR at info level. If file_name and message are nil, eventOrMessage will be used as the message.

Parameters:

  • outcome (String)

    The status of the outcome. Required.

  • eventOrMessage (String)

    name of the preservation event which was successful, or the message to output if it is the only parameter. Required.

  • file_name (String) (defaults to: nil)

    file name which is the subject of this message.

  • message (String) (defaults to: nil)

    descriptive message to accompany this output

  • service (String) (defaults to: nil)

    name of the service which executed.

  • error (Error) (defaults to: nil)

    error which occurred



107
108
109
110
111
# File 'lib/longleaf/logging/redirecting_logger.rb', line 107

def outcome(outcome, eventOrMessage, file_name = nil, message = nil, service = nil, error = nil)
  text = outcome_text(outcome, eventOrMessage, file_name, message, service, error)
  @stdout_log.info(text)
  @stderr_log.info(text)
end

#outcome_text(outcome, eventOrMessage, file_name = nil, message = nil, service = nil, error = nil) ⇒ Object (private)



114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/longleaf/logging/redirecting_logger.rb', line 114

def outcome_text(outcome, eventOrMessage, file_name = nil, message = nil, service = nil, error = nil)
  message_only = file_name.nil? && message.nil? && error.nil?

  text = "#{outcome}"

  if message_only
    text << ": #{eventOrMessage}"
  else
    text << " #{eventOrMessage}"
    text << "[#{service}]" unless service.nil?
    text << " #{file_name}" unless file_name.nil?
    msg = message || error&.message
    text << ": #{msg}" unless msg.nil?
  end
  text
end

#success(eventOrMessage, file_name = nil, message = nil, service = nil) ⇒ Object

Logs a success message to STDOUT, as well as STDERR at info level.

Parameters:

  • eventOrMessage (String)

    name of the preservation event which succeeded, or the message to output if it is the only parameter. Required.

  • file_name (String) (defaults to: nil)

    file name which is the subject of this message.

  • message (String) (defaults to: nil)

    descriptive message to accompany this output

  • service (String) (defaults to: nil)

    name of the service which executed.



76
77
78
# File 'lib/longleaf/logging/redirecting_logger.rb', line 76

def success(eventOrMessage, file_name = nil, message = nil, service = nil)
  outcome('SUCCESS', eventOrMessage, file_name, message, service)
end

#unknown(progname = nil, &block) ⇒ Object



65
66
67
# File 'lib/longleaf/logging/redirecting_logger.rb', line 65

def unknown(progname = nil, &block)
  @stderr_log.unknown(progname, &block)
end

#warn(progname = nil, &block) ⇒ Object



53
54
55
# File 'lib/longleaf/logging/redirecting_logger.rb', line 53

def warn(progname = nil, &block)
  @stderr_log.warn(progname, &block)
end