动态更改Ruby Logger的LogDevice
是否可以动态更改Ruby Logger
的LogDevice
?
如果是这样,它将允许对我现有的代码库进行一些不显眼的更改。
目前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 =’方法设置它。