gpt4 book ai didi

ruby - 使 Ruby 记录器自动刷新

转载 作者:太空宇宙 更新时间:2023-11-03 16:21:59 24 4
gpt4 key购买 nike

我正在使用标准的 Ruby 2.2 记录器(即不是 Rails 的记录器),因为我想将它用作旋转记录器,我用 shift_age 和 shift_time 调用它并传递给它一个文件名,而不是一个打开的文件句柄,像这样:

Logger.new('my_file.log', 4, 100_000)

我想让这个记录器的输出无缓冲,但我在记录器接口(interface)中没有找到任何允许这样做的方法。

在我使用这个记录器的特定方式中(我用我自己的类包装记录器,它进行自定义),我的代码中有一个中心点,每个记录请求都在这个中心点进行,所以如果我能得到底层 IO 对象,此时我可以进行同步,但我也不知道如何找到这个 IO 对象。

有什么想法吗?

最佳答案

您不需要设置sync。它已经在创建日志文件时由 Logger 设置:

def create_logfile(filename)
begin
logdev = open(filename, (File::WRONLY | File::APPEND | File::CREAT | File::EXCL))
logdev.flock(File::LOCK_EX)
logdev.sync = true
add_log_header(logdev)
logdev.flock(File::LOCK_UN)
rescue Errno::EEXIST
# file is created by another process
logdev = open_logfile(filename)
logdev.sync = true
end
logdev
end

来源:
https://github.com/ruby/ruby/blob/trunk/lib/logger.rb

关于ruby - 使 Ruby 记录器自动刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31963869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com