动态更改Ruby Logger的LogDevice

是否可以动态更改Ruby LoggerLogDevice

如果是这样,它将允许对我现有的代码库进行一些不显眼的更改。

目前Ruby Logger使用StringIO作为LogDevice

 @logDevice = StringIO.new("", "r+") @log = Logger.new(@logDevice) // a reference to this is used by many objects // both are instance vars ... @log.info('some log') // Logging activity ... // Before program ends, transmit logs to a server 

LogDevice可以动态更改LogDevice以继续记录到文件? (动态更改,因为最初文件名未知。)

或者如果日志设备无法更改, StringIO对象是否可以开始写入文件?

我可以写入临时日志文件,而不是执行上述操作,但是想检查是否可以执行上述操作,因为这对现有代码库来说是一个不那么突兀的更改。

您给记录器的对象只需要实现’write’和’close’方法,这样您就可以轻松编写自己的’io’:

 class MyIO def initialize @file = nil @history = StringIO.new "", "w" end def file=(filename) @file = File.open(filename, 'a+') @file.write @history.string if @history @history = nil end def write(data) @history.write(data) if @history @file.write(data) if @file end def close @file.close if @file end 

结束

使用该实例创建记录器并保留对实例的引用。 然后,只要知道文件名,只需使用’file =’方法设置它。