是否可以动态更改Ruby LogDevice
的{{1}}?
如果是这样,它将允许对我现有的代码库进行一些不显眼的更改。
目前,Ruby Logger
使用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
对象是否可以开始写入文件?
我可以写一个临时的日志文件而不是上面的内容,但是想检查是否可以完成上述操作,因为这对现有的代码库来说是一个不那么突兀的改动。
答案 0 :(得分:1)
您给记录器的对象只需要实现'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 ='方法设置它。