3

スクリプトがデーモン化されると、ロガーはファイルに書き込むことができなくなります。では、いつどのようにログを初期化すればよいのでしょうか?

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 はまだ書き込みできません。

4

1 に答える 1

0

これがどのように機能し始めたかです

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

current_dir = Dir.pwd

Daemons.run_proc('ForestPress', :log_dir => '.logs', :backtrace => true) do
    Dir.chdir(current_dir)  

    logger = create_new_logger

    loop do
        puts Dir.pwd
        logger.debug Time.new   
        sleep 5 
    end
end
于 2012-05-25T06:51:45.530 に答える