class Processor::Observer::Logger

Public Class Methods

new(logger = nil, options = {}) click to toggle source
Calls superclass method
# File lib/processor/observer/logger.rb, line 10
def initialize(logger = nil, options = {})
  if logger.is_a? Hash
    @log_level = logger.fetch :level, ::Logger::INFO
  else
    @logger_source = logger
  end

  @messages = options.fetch :messages, nil
  @messages = OpenStruct.new @messages if @messages.is_a? Hash


  super options
end

Public Instance Methods

after_finalize(result) click to toggle source
# File lib/processor/observer/logger.rb, line 37
def after_finalize(result)
  logger.info "Processing of #{processor_name} finished."
  messenger.message messages.finished
end
after_process(result, record) click to toggle source
# File lib/processor/observer/logger.rb, line 33
def after_process(result, record)
  logger.info "Processed #{id_for record}: #{result}"
end
after_start(result) click to toggle source
# File lib/processor/observer/logger.rb, line 24
def after_start(result)
  logger.info "Processing of #{processor_name} started."
  messenger.info messages.initialized
end
before_error(exception) click to toggle source
# File lib/processor/observer/logger.rb, line 46
def before_error(exception)
  logger.fatal "Processing #{processor_name} FAILED: #{exception.backtrace}"
end
before_process(record) click to toggle source
# File lib/processor/observer/logger.rb, line 29
def before_process(record)
  logger.debug "Record #{id_for record} is going to be processed"
end
before_record_error(record, exception) click to toggle source
# File lib/processor/observer/logger.rb, line 42
def before_record_error(record, exception)
  logger.error "Error processing #{id_for record}: #{exception.inspect}"
end
logger() click to toggle source
# File lib/processor/observer/logger.rb, line 50
def logger
  @logger ||= begin
  if @logger_source.is_a? Proc
      @logger_source.call processor_name
    else
      @logger_source or ::Logger.new(create_log_filename(processor_name)).tap do |logger|
        logger.level = log_level
      end
    end
  end
end

Private Instance Methods

create_log_filename(processor_name) click to toggle source
# File lib/processor/observer/logger.rb, line 80
def create_log_filename(processor_name)
  unless File.directory? log_directory
    FileUtils.mkdir log_directory
    messenger.warn "Created new directory for logs: #{File.absolute_path log_directory}"
  end

  @log_file_name = "#{log_directory}/#{processor_name}_on_#{current_time_string}.log"
end
current_time_string() click to toggle source
# File lib/processor/observer/logger.rb, line 93
def current_time_string
  Time.now.gmtime.strftime "%Y-%m-%d_%H%M%S_UTC"
end
id_for(record) click to toggle source
# File lib/processor/observer/logger.rb, line 97
def id_for record
  return processor.record_id record if processor.respond_to? :record_id
  record.to_s.strip
end
log_directory() click to toggle source
# File lib/processor/observer/logger.rb, line 89
def log_directory
  "log"
end
log_level() click to toggle source
# File lib/processor/observer/logger.rb, line 64
def log_level
  @log_level ||= ::Logger::INFO
end
messages() click to toggle source
# File lib/processor/observer/logger.rb, line 68
def messages
  @messages ||= LoggerMessages.new logger
end
processor_name() click to toggle source
# File lib/processor/observer/logger.rb, line 72
def processor_name
  @processor_name ||=
    begin
      @processor = Subroutine::Name.new processor unless processor.respond_to? :name
      processor.name
    end
end