gpt4 book ai didi

ruby - 我可以禁用 ruby​​ 记录器的日志 header 吗?

转载 作者:数据小太阳 更新时间:2023-10-29 06:43:38 24 4
gpt4 key购买 nike

我目前遇到了一些问题。

您可能知道,ruby 记录器会在每个新创建的日志文件的顶部添加一个记录 header 。

"# Logfile created on %s by %s\n" % [Time.now.to_s, Logger::ProgName]

我正在记录 CSV 文件以便稍后将它们导入仓库,通常我只是跳过带有标题的第一行。记录器中似乎存在错误,因为有时日志记录 header 出现不止一次,就在日志文件的中间。

所以我决定简单地离开那个标题。令我惊讶的是,我没有发现任何可以在创建记录器时通过的论据。我想到了这样的事情:

Logger.new "info.log", :skip_header => true

但它就是不存在。我搜索了 ruby​​ 核心资源,令人惊讶的是,确实没有什么可以阻止记录器添加日志 header :

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

有谁知道我可以做什么来阻止日志 header ?我在这里使用 Ruby 1.8.7 302 和 Rails 2.3.5。简单地忽略仓库端的注释是不可能的,因为我无法控制那里的代码,如果日志行出现问题,简单地忽略它似乎是有风险的。

有人知道允许这样做的记录器吗?您认为使用 plain 并将其写入文件是个好主意吗?

提前致谢,汤米

最佳答案

理想情况下,Logger 实例上的 add_log_header 方法应该被覆盖,但由于 add_log_header 是在初始化时调用的,所以当你接触到它时已经太晚了。好吧,您可以只覆盖类上的 add_log_header 方法。

class Logger::LogDevice
def add_log_header(file)
end
end

log1 = Logger.new('info1.log')

但是如果您的应用在此之后需要更多 Logger 实例,它们的行为将相同:没有 header 。为了防止这种情况:

# 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

关于ruby - 我可以禁用 ruby​​ 记录器的日志 header 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4096336/

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