gpt4 book ai didi

ruby - 可以将标准 Ruby 记录器配置为在每条消息后刷新吗?

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

标准 Ruby 记录器(即 ::Logger )是否可以在每次写入后自动刷新?

更新:我正在根据 How to get timestamps in your ruby on rails logs 设置自定义日志格式化程序:

class Foo
def initialize(params = {})
@logger = Logger.new $stdout
@logger.formatter = LogFormatter.new
@logger.level = params.include?(:log) ? params[:log] : Logger::INFO
# ...
end

class LogFormatter < Logger::Formatter
def call(severity, time, progname, message)
timestamp = time.iso8601
log_msg = "#{timestamp}#{" [#{severity}]" if %w{ERROR WARN}.include? severity} "
if message.is_a? Exception
log_msg += "#{message.message}"
log_msg += ": #{message.backtrace.join "\n#{timestamp} "}" unless message.backtrace.blank?
else
log_msg += message
end

"#{log_msg}\n"
end
end
end

我尝试使用来自 idlefingers 的建议如下:

  def initialize(params = {})
Rails.logger.auto_flushing = 1
@logger = Logger.new $stdout
@logger.formatter = LogFormatter.new
@logger.level = params.include?(:log) ? params[:log] : Logger::INFO
end

但是没有骰子。 @logger.auto_flushing = 1 也不适合我。我做错了什么?

更新:事实证明,ActiveSupport 的 ::Logger简单地包装了标准的 Ruby ::Logger。所以我的问题毕竟是关于 Ruby 而不是 Rails。

最佳答案

事实证明,这只是打开底层 IO 对象的 sync 属性的问题:

  def initialize(params = {})
$stdout.sync = true unless RAILS_ENV == 'production'
@logger = Logger.new $stdout
@logger.formatter = LogFormatter.new
@logger.level = params.include?(:log) ? params[:log] : Logger::INFO
end

关于ruby - 可以将标准 Ruby 记录器配置为在每条消息后刷新吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5381082/

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