# $LOAD_PATH << File.expand_path("#{File.dirname(__FILE__)}") require 'logging' # Logger params Logging.init :trace, :debug, :info, :warn, :error, :fatal # Custom colour set Logging.color_scheme('my_bright', :levels => { :trace => :white, :debug => :blue, :info => :green, :warn => :yellow, :error => :red, :fatal => [:black, :on_red] }, :date => :blue, :logger => :cyan, :message => :white ) # https://www.rubydoc.info/gems/logging/Logging/Layouts/Pattern/FormatMethodBuilder LOG_PATTERN_SIMPLE = "[%d] %-5l %m\n" LOG_PATTERN_WITH_CLASS = "[%d] %-5l %c: %m\n" LOG_PATTERN_WITH_METHODS = "[%d] %-5l %c: %M: %m\n" # need to get this to work LOG_PATTERN_WITH_ALL = "[%d] %-5l %c: %M: %h: %p: %r: %T: %t: %F: %L: %M: %x\n" TIMESTAMP_PATTERN = "%Y-%m-%d %H:%M:%S.%L" LOG_TIME_TODAY = Time.now.strftime("%Y-%m-%d") LOG_TIME_NOW = Time.now.strftime("%Y-%m-%d_%H-%M-%S") LOG_LOC = "./logs" LOG_FILE = "log_#{LOG_TIME_TODAY}.log" LOG_FILE_PATH = File.join(LOG_LOC, LOG_FILE) LOG_STDOUT = 'stdout' Dir.mkdir(LOG_LOC) unless Dir.exists? LOG_LOC module LoggerSetup def self.reset_appender_log_levels stdout_level = :info, file_level = :trace # Stdout appender Logging.appenders.stdout(LOG_STDOUT, # level: :info, # a different log level to your file appender level: stdout_level, # a different log level to your file appender layout: Logging.layouts.pattern( pattern: LOG_PATTERN_WITH_CLASS, color_scheme: 'my_bright', # best not to use color_schemes on file loggers date_pattern: TIMESTAMP_PATTERN)) # File appender Logging.appenders.file(LOG_FILE_PATH, # level: :debug, # or your custom lowest level init-ed level: file_level, # or your custom lowest level init-ed layout: Logging.layouts.pattern( pattern: LOG_PATTERN_WITH_CLASS, # color_scheme: 'my_bright', # best not to use color_schemes on file loggers date_pattern: TIMESTAMP_PATTERN), # truncate: true, # if you want to clear old log information # age: 5 * 60, # feel free to play around with these roll_by: :date # for rolling logs if you want to change files periodically ) end end # to restore defaults, run # LoggerSetup.reset_appender_log_levels # stdout_level = :info, file_level = :debug LoggerSetup.reset_appender_log_levels :error, :trace # sample logger setup module module LoggerSetup attr_reader :log def init_logger(level = nil) @log = Logging.logger[self] @log.level = level || :debug # your lowest level @log.add_appenders( LOG_STDOUT, LOG_FILE_PATH ) @log end end