lib/itamae-mitsurin/logger.rb in itamae-mitsurin-0.50 vs lib/itamae-mitsurin/logger.rb in itamae-mitsurin-1.0.0

- old
+ new

@@ -116,43 +116,97 @@ end end ANSI.public_send(color_code) { str } end end - end - # @logger = ::Logger.new($stdout).tap do |l| - # l.formatter = ItamaeMitsurin::Logger::Formatter.new - # end.extend(ItamaeMitsurin::Logger::Helper) + class FileFormatter < Formatter + def call(severity, datetime, progname, msg) + log = "%s : %s" % ["%5s" % severity, msg2str(msg)] + Time.now.strftime('%F %T %z').to_s + log + "\n" + end - @logger = ::Logger.new($stdout).tap do |l| - l.formatter = ItamaeMitsurin::Logger::Formatter.new - end.extend(ItamaeMitsurin::Logger::Helper) + # def colorize(str, severity) + # Time.now.strftime('%F %T %z').to_s + str + # end + end - class ItamaeMitsurin::Logger::FileFormatter < ItamaeMitsurin::Logger::Formatter - def colorize(str, severity) - Time.now.strftime('%Y %m %d %H:%M:%S %z').to_s + str + def self.broadcast(logger) + Module.new do + define_method(:add) do |*args, &block| + logger.add(*args, &block) + super(*args, &block) + end + + define_method(:<<) do |x| + logger << x + super(x) + end + + define_method(:close) do + logger.close + super() + end + + define_method(:progname=) do |name| + logger.progname = name + super(name) + end + + define_method(:formatter=) do |formatter| + logger.formatter = formatter + super(formatter) + end + + define_method(:level=) do |level| + logger.level = level + super(level) + end + + define_method(:local_level=) do |level| + logger.local_level = level if logger.respond_to?(:local_level=) + super(level) if respond_to?(:local_level=) + end + + define_method(:silence) do |level = Logger::ERROR, &block| + if logger.respond_to?(:silence) + logger.silence(level) do + if defined?(super) + super(level, &block) + else + block.call(self) + end + end + else + if defined?(super) + super(level, &block) + else + block.call(self) + end + end + end + end end end - @file_logger = ::Logger.new('logs/itamae.log', 5, 100 * 1024 * 1024).tap do |l| - l.formatter = ItamaeMitsurin::Logger::FileFormatter.new + @logger = ::Logger.new($stdout).tap do |l| + l.formatter = ItamaeMitsurin::Logger::Formatter.new end.extend(ItamaeMitsurin::Logger::Helper) + if Dir.exist?('logs') + @file_logger = ::Logger.new('logs/itamae.log', 'daily').tap do |l| + l.formatter = ItamaeMitsurin::Logger::FileFormatter.new + end.extend(ItamaeMitsurin::Logger::Helper) + + @logger.extend ItamaeMitsurin::Logger.broadcast(@file_logger) + end + class << self def logger @logger end def logger=(l) @logger = l.extend(ItamaeMitsurin::Logger::Helper) - end - - def file_logger - @file_logger - end - - def file_logger=(l) - @file_logger = l.extend(ItamaeMitsurin::Logger::Helper) end end end