导致Ruby Logger自动刷新

时间:2015-08-12 11:26:50

标签: ruby logging

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

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

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您无需设置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