module BerkeleyLibrary::Logging::Loggers

Constants

FALLBACK_LOG_DIR

Public Class Methods

default_logger() click to toggle source
# File lib/berkeley_library/logging/loggers.rb, line 11
def default_logger
  if defined?(Rails)
    return Rails.logger if Rails.logger

    warn('Rails is defined, but Rails logger is nil')
  end

  new_default_logger
end
new_default_logger(config = nil) click to toggle source

TODO: support passing a hash / passing default_log_file

# File lib/berkeley_library/logging/loggers.rb, line 22
def new_default_logger(config = nil)
  return new_readable_logger($stdout) unless config
  return new_json_logger($stdout) if Logging.env.production?
  return rails_file_logger(config) if Logging.env.test?
  return new_broadcast_logger(config) if Logging.env.development?

  raise ArgumentError, "Can't create logger for environment: #{Logging.env.inspect}"
end
new_json_logger(logdev) click to toggle source
# File lib/berkeley_library/logging/loggers.rb, line 31
def new_json_logger(logdev)
  new_logger_with(logdev: logdev, formatter: Formatters.new_json_formatter)
end
new_readable_logger(logdev) click to toggle source
# File lib/berkeley_library/logging/loggers.rb, line 35
def new_readable_logger(logdev)
  new_logger_with(logdev: logdev, formatter: Formatters.new_readable_formatter)
end

Private Class Methods

default_log_file_for(config) click to toggle source
# File lib/berkeley_library/logging/loggers.rb, line 57
def default_log_file_for(config)
  return config.default_log_file if config.respond_to?(:default_log_file)

  File.join(ensure_log_directory, "#{Logging.env}.log")
end
ensure_log_directory() click to toggle source
# File lib/berkeley_library/logging/loggers.rb, line 63
def ensure_log_directory
  File.join(workdir, FALLBACK_LOG_DIR).tap do |log_dir|
    FileUtils.mkdir(log_dir) unless File.exist?(log_dir)
    raise ArgumentError, "Not a directory: #{log_dir}" unless File.directory?(log_dir)
  end
end
new_broadcast_logger(config) click to toggle source
# File lib/berkeley_library/logging/loggers.rb, line 41
def new_broadcast_logger(config)
  new_json_logger($stdout).tap do |json_logger|
    file_logger = rails_file_logger(config)
    json_logger.extend Ougai::Logger.broadcast(file_logger)
  end
end
new_logger_with(logdev:, formatter:) click to toggle source
# File lib/berkeley_library/logging/loggers.rb, line 53
def new_logger_with(logdev:, formatter:)
  Logger.new(logdev).tap { |l| l.formatter = formatter }
end
rails_file_logger(config) click to toggle source
# File lib/berkeley_library/logging/loggers.rb, line 48
def rails_file_logger(config)
  log_file = default_log_file_for(config)
  new_readable_logger(log_file)
end
workdir() click to toggle source
# File lib/berkeley_library/logging/loggers.rb, line 70
def workdir
  return Rails.application.root if defined?(Rails)

  Pathname.getwd
end