Tho*_*ser 11 ruby logging header
我目前遇到了一个问题.
您可能知道,ruby logger在每个新创建的日志文件的顶部添加了一个日志标头.
"# Logfile created on %s by %s\n" % [Time.now.to_s, Logger::ProgName]
Run Code Online (Sandbox Code Playgroud)
我正在记录CSV文件以便稍后在仓库中导入它们,通常我只是跳过带标题的第一行.似乎记录器中存在错误,因为有时日志记录标题会出现在日志文件的中间.
所以我决定简单地把那个标题留下来.令我惊讶的是,我没有发现在创建记录器时可以传递的任何争论.我想到了这样的事情:
Logger.new "info.log", :skip_header => true
Run Code Online (Sandbox Code Playgroud)
但它不存在.我搜索了ruby核心源代码,令人惊讶的是,确实没有任何东西可以阻止记录器添加日志头:
def create_logfile(filename)
logdev = open(filename, (File::WRONLY | File::APPEND | File::CREAT))
logdev.sync = true
add_log_header(logdev)
logdev
end
def add_log_header(file)
file.write(
"# Logfile created on %s by %s\n" % [Time.now.to_s, Logger::ProgName]
)
end
Run Code Online (Sandbox Code Playgroud)
有没有人知道我能做什么,以防止日志标题?我在这里使用Ruby 1.8.7 302和Rails 2.3.5.简单地忽略仓库方面的评论是不可能的,因为我无法控制那里的代码,如果日志行出现问题,那么忽略它似乎是冒险的.
有人知道一个允许这个的记录器吗?你认为在文件中使用和写明文是个好主意吗?
先谢谢你,汤米
理想的情况是在Logger实例的方法add_log_header应该被覆盖,但由于add_log_header叫上初始化,你来得太晚了由你得到你的手放在它的时间.好吧,你可以覆盖Class上的add_log_header方法.
class Logger::LogDevice
def add_log_header(file)
end
end
log1 = Logger.new('info1.log')
Run Code Online (Sandbox Code Playgroud)
但是,如果您的应用在此之后需要更多Logger实例,它们的行为将相同:无标题.为了防止这种情况
# dismantle the header and save it under another name
class Logger::LogDevice
alias orig_add_log_header add_log_header
def add_log_header(file)
end
end
# Quick,create an instance
log1 = Logger.new('test_log1file.log')
# restore the old method:
class Logger::LogDevice
alias add_log_header orig_add_log_header
end
Run Code Online (Sandbox Code Playgroud)
这是一个涉及子类化的解决方案Logger.我们必须偷偷摸摸与initialize和super保持它从创建一个标准Logger::LogDevice为时尚早.
class HeadlessLogger < Logger
def initialize(logdev, shift_age = 0, shift_size = 1048576)
super(nil) # this prevents it from initializing a LogDevice
if logdev
@logdev = HeadlessLogger::LogDevice.new(logdev, shift_age: shift_age, shift_size: shift_size)
end
end
class LogDevice < ::Logger::LogDevice
def add_log_header(file) ; end
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1952 次 |
| 最近记录: |