1

我在我的项目中使用 ruby​​ 记录器,我有 conf.rb 类似于:

require 'rubygems'

# initiate the logger file 
$LOG = Logger.new("#{$ROOT_PATH}/log/errors.log", 'daily')  
$LOG.datetime_format = "%Y-%m-%d %H:%M:%S"

更像是一个工人,我正在使用类似worker1.rb的东西:

require "#{$ROOT_PATH}/conf.rb"
$LOG.error "test"  

现在例如,至于今天,我应该在error.log文件中获得所有结果,但我在 log/errors.log.20130221、log/errors.log.20130221.1 和 log/errors 中获得结果.log.20130221.2。工人一直在运行,所以没有重新启动它。

我在 Ubuntu 下使用 ruby​​ ruby​​ 1.9.3p0。

4

1 回答 1

0

Logger#datetime_format引用日志文件(日志格式化程序)中的日期,而不是文件名格式轮换。

旋转文件的文件名被硬编码到 lib - https://github.com/ruby/ruby/blob/trunk/lib/logger.rb#L645

您可以重新定义方法,也可以使用 rotatelogs

Logger.new(IO.popen("/usr/sbin/rotatelogs -l file_pattern period", 'a'))

出现 .1、.2 扩展名是因为 Logger 已shift_size默认设置。一旦日志文件达到该值,日志就会轮换,但由于日期相同,记录器正在添加数字以防止冲突。

于 2013-02-22T12:30:22.300 回答