DEBUG_MODE = true def get_time Time.now.ctime[4..15] end ### adds an outputter to your definitions. FileOutputter.new('logs_directory', {:filename=>("log/%8.8s.log" % get_time).gsub(/ /, '_')}) Logger.new('LOG').level = INFO Logger.new 'CONSOLE' Logger['LOG'].outputters = Outputter['logs_directory'] ### This is everything but debug messages. This should go to logs and imm channel. Logger['CONSOLE'].outputters = Outputter['stdout'] ### only output to standard output. Definitely not logs_directory. # method to log strings. # log(:info, "%s", "str to interpolate") # log(:info, "string") # log(:debug, "string") def log(sym, str) msg = "#{get_time.gsub(/ /, '_')}: #{str}" # dump the message to all loggers. Logger['CONSOLE'].send(sym, msg) Logger['LOG'].send(sym, msg) if sym == :info && $dplayer_list $dplayer_list.each do |ch| if ch.level >= LEVEL_IMM ch.text_to_player msg + ENDL end end end end # logs exceptions and backtrace. def log_exception(e, sym=:error) ar = [e.message] ar = ar + e.backtrace ar.each do |element| Logger['LOG'].send(sym, element) Logger['CONSOLE'].send(sym, element) end if sym == :info && $dplayer_list $dplayer_list.each do |ch| if ch.level >= LEVEL_IMM ar.each do |element| ch.text_to_player element + ENDL end end end end end if DEBUG_MODE == true log(:debug, "Debugging is turned on. Debug logs are NOT saved. They only appear here. (In STDOUT.)") end