-def rawlog(level, message=nil, who_pos=1)
- call_stack = caller
- if call_stack.length > who_pos
- who = call_stack[who_pos].sub(%r{(?:.+)/([^/]+):(\d+)(:in .*)?}) { "#{$1}:#{$2}#{$3}" }
- else
- who = "(unknown)"
- end
- # Output each line. To distinguish between separate messages and multi-line
- # messages originating at the same time, we blank #{who} after the first message
- # is output.
- # Also, we output strings as-is but for other objects we use pretty_inspect
- case message
- when String
- str = message
- else
- str = message.pretty_inspect
- end
- qmsg = Array.new
- str.each_line { |l|
- qmsg.push [level, l.chomp, who]
- who = ' ' * who.size
- }
- $log_queue.push qmsg
-end
-
-def halt_logger
- if $log_thread && $log_thread.alive?
- $log_queue << nil
- $log_thread.join
- $log_thread = nil
- end
-end
-
-END { halt_logger }
-
-def restart_logger(newlogger = false)
- halt_logger
-
- $logger = newlogger if newlogger
-
- $log_thread = Thread.new do
- ls = nil
- while ls = $log_queue.pop
- ls.each { |l| $logger.add(*l) }
- end
- end
-end
-
-restart_logger
-
-def log_session_start
- $logger << "\n\n=== #{botclass} session started on #{Time.now.strftime($dateformat)} ===\n\n"
- restart_logger
-end
-
-def log_session_end
- $logger << "\n\n=== #{botclass} session ended on #{Time.now.strftime($dateformat)} ===\n\n"
- $log_queue << nil
-end
-
-def debug(message=nil, who_pos=1)
- rawlog(Logger::Severity::DEBUG, message, who_pos)
-end
-
-def log(message=nil, who_pos=1)
- rawlog(Logger::Severity::INFO, message, who_pos)
-end
-
-def warning(message=nil, who_pos=1)
- rawlog(Logger::Severity::WARN, message, who_pos)
-end
-
-def error(message=nil, who_pos=1)
- rawlog(Logger::Severity::ERROR, message, who_pos)
-end
-
-def fatal(message=nil, who_pos=1)
- rawlog(Logger::Severity::FATAL, message, who_pos)
-end
-
-debug "debug test"
-log "log test"
-warning "warning test"
-error "error test"
-fatal "fatal test"
-