我有一个名为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
。需要指导解决此问题。
答案 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!'