无法在Ruby中找到全局日志文件

时间:2015-03-03 07:43:53

标签: ruby

我有一个名为main.rb的脚本,我在其中调用模块。在脚本中,我正在创建一个日志文件(类似\abc\xyz\script\tool.log)并将其存储在全局变量$ LOG中:$LOG = Logger.new('tool.log', 'daily')

main.rb我调用另一个模块的方法(比如HostM.changeDir1),将目录更改为\abc\xyz。现在,当我尝试写入$LOG时,通过打印\abc\xyz\tool.log does not exist会出错。我想知道如何让它在适当的位置查找日志,即\abc\xyz\script\tool.log。需要指导解决此问题。

1 个答案:

答案 0 :(得分:2)

添加日志文件的完整路径是一个选项

$LOG = Logger.new('\abc\xyz\script\tool.log', 'daily')

然而,使用全局变量通常是不好的做法,我希望使用绝对路径也会导致问题,如果您将应用程序移动到另一个位置。因此,我建议您将Logger包装在一个新类中,该类定义标准行为和日志文件的路径,该路径相对于定义新类的文件。

require 'logger'

class AppLogger < Logger
  def initialize(period = 'daily')
    path_to_log = File.expand_path('relative/path/to/tool.log', File.dirname(__FILE__))
    super path_to_log, period
  end
end

然后,当您在应用中需要记录器时,可以执行以下操作:

logger = AppLogger.new
logger.debug 'Whoops'

如果您想确保只使用一个记录器实例,我会在您的Main类中加载记录器实例,并从那里共享它:

class Main

  require_relative 'app_logger'

  def self.logger
    @logger ||= AppLogger.new
  end

  ....
end

然后在您的应用的其余部分,您将能够像这样调用记录器:

 Main.logger.debug 'Whoops!'