summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbin/rbot14
-rw-r--r--lib/rbot/ircbot.rb9
-rw-r--r--lib/rbot/logger.rb14
3 files changed, 26 insertions, 11 deletions
diff --git a/bin/rbot b/bin/rbot
index 82ee9c9a..8c65f42c 100755
--- a/bin/rbot
+++ b/bin/rbot
@@ -111,14 +111,14 @@ if ($opts["help"])
exit 0
end
-if(bot = Irc::Bot.new(ARGV.shift, :argv => orig_opts))
- # setup logger based on command line arguments
- loglevel = $opts['loglevel'] ? $opts['loglevel'].to_i : nil
- loglevel = $opts['debug'] ? 0 : loglevel
- if loglevel
- Irc::Bot::LoggerManager.instance.set_level(loglevel)
- end
+# setup logger based on command line arguments
+loglevel = $opts['loglevel'] ? $opts['loglevel'].to_i : nil
+loglevel = $opts['debug'] ? 0 : loglevel
+if loglevel
+ Irc::Bot::LoggerManager.instance.set_level(loglevel)
+end
+if(bot = Irc::Bot.new(ARGV.shift, :argv => orig_opts))
# just run the bot
bot.mainloop
end
diff --git a/lib/rbot/ircbot.rb b/lib/rbot/ircbot.rb
index ecb48449..4eac68d6 100644
--- a/lib/rbot/ircbot.rb
+++ b/lib/rbot/ircbot.rb
@@ -403,6 +403,8 @@ class Bot
debug "Using `#{@logfile}' as debug log"
end
+ LoggerManager.instance.flush
+
# See http://blog.humlab.umu.se/samuel/archives/000107.html
# for the backgrounding code
if $daemonize
@@ -421,8 +423,11 @@ class Bot
# File.umask 0000 # Ensure sensible umask. Adjust as needed.
end
- # setup logger based on bot configuration
- LoggerManager.instance.set_level(@config['log.level'])
+ # setup logger based on bot configuration, if not set from the command line
+ loglevel_set = $opts.has_key?('debug') or $opts.has_key?('loglevel')
+ LoggerManager.instance.set_level(@config['log.level']) unless loglevel_set
+
+ # Set the logfile
LoggerManager.instance.set_logfile(@logfile, @config['log.keep'], @config['log.max_size'])
if $daemonize
diff --git a/lib/rbot/logger.rb b/lib/rbot/logger.rb
index b5f615d7..fd6d485f 100644
--- a/lib/rbot/logger.rb
+++ b/lib/rbot/logger.rb
@@ -23,13 +23,16 @@ class Bot
@file_logger = nil
@queue = Queue.new
- @thread = start_thread
+ start_thread
end
def set_logfile(filename, keep, max_size)
@file_logger = Logger.new(filename, keep, max_size*1024*1024)
@file_logger.datetime_format = @dateformat
@file_logger.level = @logger.level
+ # make sure the thread is running, which might be false after a fork
+ # (conveniently, we call set_logfile right after the fork)
+ start_thread
end
def set_level(level)
@@ -90,10 +93,17 @@ class Bot
end
end
+ def flush
+ while @queue.size > 0
+ next
+ end
+ end
+
private
def start_thread
- Thread.new do
+ return if @thread and @thread.alive?
+ @thread = Thread.new do
lines = nil
while lines = @queue.pop
lines.each { |line|