Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
导致Ruby记录器自动刷新_Ruby_Logging - Fatal编程技术网

导致Ruby记录器自动刷新

导致Ruby记录器自动刷新,ruby,logging,Ruby,Logging,我使用的是标准的Ruby 2.2记录器(即,不是Rails的记录器),因为我想将其用作旋转记录器,所以我使用shift_age和shift_time将其称为,并向其传递一个文件名,而不是一个打开的文件句柄,如下所示: Logger.new('my_file.log', 4, 100_000) 我想使这个记录器的输出无缓冲,但是我在记录器接口中找不到任何允许这样做的方法 在我使用这个记录器的特殊方式中(我用自己的类包装记录器,它可以进行定制),我的代码中有一个中心点,每个日志请求都要经过这个中心

我使用的是标准的Ruby 2.2记录器(即,不是Rails的记录器),因为我想将其用作旋转记录器,所以我使用shift_age和shift_time将其称为,并向其传递一个文件名,而不是一个打开的文件句柄,如下所示:

Logger.new('my_file.log', 4, 100_000)
我想使这个记录器的输出无缓冲,但是我在记录器接口中找不到任何允许这样做的方法

在我使用这个记录器的特殊方式中(我用自己的类包装记录器,它可以进行定制),我的代码中有一个中心点,每个日志请求都要经过这个中心点,因此如果我可以找到底层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
来源:

你说的无缓冲是什么意思?例如,当您编写
logger.info
时,输出会立即出现在日志文件中。我可以问您,这是在哪里记录的吗?我在文档中没有发现任何关于Logger会在其IO句柄上将sync设置为true的内容,但是当我搜索该主题时,我在各种论坛讨论中发现Logger输出不会自动刷新(但是我也没有找到任何有用的解决方案)。也许我必须深入研究Logger的源代码才能得到权威性的答案……我想要两者,
在终端中打印日志
,最后创建一个日志文件。我该怎么做?@paul如果你想同时做这两件事,这里有一些解决方案: