Something went wrong. Try again.
Code for the Advent of Code event
aoc advent-of-code
Something went wrong. Try again.
1.2 kB · 54 lines
Ruby
at rust
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455# frozen_string_literal: true
module AoC # Include-able module to enable logging from modules and classes. module Logging # Get the {AoC::Logger} instance for the current object. # @return [AoC::Logger] def log self.class.log end
@out = $stderr @level = Logger::INFO @formatter = Ougai::Formatters::Readable.new @loggers = {}
class << self # @param value [IO] attr_writer :out
attr_writer :formatter
def level=(level) @level = level @loggers.each_value { |l| l.level = level } end
def logger_for(source) name = source_to_name source @loggers[name] ||= Logger.new(@out, progname: name, level: @level).tap do |l| l.formatter = @formatter end end
def source_to_name(source) if source.respond_to? :name source.name elsif source.is_a? String source else source.to_s end end
def included(base) class << base def log @log ||= Logging.logger_for self end end end end endend