スクリプトがデーモン化されると、ロガーはファイルに書き込むことができなくなります。では、いつどのようにログを初期化すればよいのでしょうか?
require 'rubygems'
require 'daemons'
require 'logging'
def create_new_logger
logger = Logging.logger['trend-analyzer']
logger.add_appenders(
Logging.appenders.rolling_file('./logs/trend-analyzer.log'),
Logging.appenders.stdout
)
logger.level = :debug
return logger
end
logger = create_new_logger
#this log message gets written to the log file
logger.debug Time.new
Daemons.run_proc('ForestPress', :log_dir => '.logs', :backtrace => true) do
running_as_daemon = true
#this log message does NOT get written to the log file
logger.debug Time.new
loop do
#this log message does NOT get written to the log file
logger.info Time.new
sleep 5
end
end
編集
現在のパスが、スクリプトを実行した場所から に変更されていることに気付きました/
。これがメッセージをログに記録できない理由でしょうか?
編集2
デーモンになる前に元のパスを保存し、Dir.chdir
パスを元のパスに設定するために使用します。その後、ファイルを直接開いて書き込むことができます。ただし、logging gem はまだ書き込みできません。