18 @dateformat = "%Y/%m/%d %H:%M:%S"
20 @logger = Logger.new(STDERR)
21 @logger.datetime_format = @dateformat
22 @logger.level = Logger::Severity::DEBUG
26 @thread = start_thread
29 def set_logfile(filename, keep, max_size)
30 @file_logger = Logger.new(filename, keep, max_size*1024*1024)
31 @file_logger.datetime_format = @dateformat
32 @file_logger.level = @logger.level
38 @file_logger.level = level
42 def sync_log(severity, message = nil, progname = nil)
43 @logger.add(severity, message, progname)
45 @file_logger.add(severity, message, progname)
49 def async_log(severity, message=nil, who_pos=1)
51 STDERR.puts('logger thread already destroyed, cannot log message!')
55 if call_stack.length > who_pos
56 who = call_stack[who_pos].sub(%r{(?:.+)/([^/]+):(\d+)(:in .*)?}) { "#{$1}:#{$2}#{$3}" }
60 # Output each line. To distinguish between separate messages and multi-line
61 # messages originating at the same time, we blank #{who} after the first message
63 # Also, we output strings as-is but for other objects we use pretty_inspect
64 message = message.kind_of?(String) ? message : (message.pretty_inspect rescue '?')
66 message.each_line { |l|
67 qmsg.push [severity, l.chomp, who]
75 @file_logger << "\n\n=== session started on #{Time.now.strftime(@dateformat)} ===\n\n"
81 @file_logger << "\n\n=== session ended on #{Time.now.strftime(@dateformat)} ===\n\n"
86 if @thread and @thread.alive?
98 while lines = @queue.pop
111 def debug(message=nil, who_pos=1)
112 Irc::Bot::LoggerManager.instance.async_log(Logger::Severity::DEBUG, message, who_pos)
115 def log(message=nil, who_pos=1)
116 Irc::Bot::LoggerManager.instance.async_log(Logger::Severity::INFO, message, who_pos)
119 def warning(message=nil, who_pos=1)
120 Irc::Bot::LoggerManager.instance.async_log(Logger::Severity::WARN, message, who_pos)
123 def error(message=nil, who_pos=1)
124 Irc::Bot::LoggerManager.instance.async_log(Logger::Severity::ERROR, message, who_pos)
127 def fatal(message=nil, who_pos=1)
128 Irc::Bot::LoggerManager.instance.async_log(Logger::Severity::FATAL, message, who_pos)