De ce acest cod Ruby nu reușește să scrie în fișierul de jurnal?

Odată ce scriptul este daemonizat, loggerul nu mai poate scrie în fișier. Deci, cum și când trebuie să inițializez jurnalul?

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

EDIT

Observ modificările din calea curentă de unde am executat scriptul la /. De ce nu pot loga mesaje?


EDIT 2

Acum salvez calea originală înainte de a deveni un daemon și apoi folosiți Dir.chdir pentru a seta calea către calea inițială. Pot să deschid direct fișierul și să îl scriu. Cu toate acestea, bijuteria de logare nu se poate scrie la ea în continuare.

3

1 răspunsuri

Iată cum a început să funcționeze

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
0
adăugat