【问题标题】:Why does this Ruby code fail to write to the log file?为什么这段 Ruby 代码无法写入日志文件?
【发布时间】:2012-05-31 17:46:08
【问题描述】:

一旦脚本被守护,那么记录器就不能再写入文件了。那么我应该如何以及何时初始化日志呢?

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 将路径设置为原始路径。然后我可以直接打开文件并写入它。但是,日志记录 gem 仍然无法写入它。

【问题讨论】:

    标签: ruby-on-rails ruby logging daemon


    【解决方案1】:

    这是它开始工作的方式

    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
    

    【讨论】:

      猜你喜欢
      • 2022-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多