gpt4 book ai didi

ruby-on-rails - Rails 日志中的缩进

转载 作者:行者123 更新时间:2023-12-04 12:50:38 25 4
gpt4 key购买 nike

记录自定义信息时,例如在 rake -task,我想缩进日志行以获得更好的可读性。例如:

Seeding database...
Importing xyz.csv...
Skipping row 5 due to invalid value 'Unknown' in column 'year'
Finished importing xyz.csv
Finished seeding database

在我的 seeds.rb ,我使用以下记录:
logger = Logger.new(STDOUT)
logger.info('Seeding database...')

但是,日志记录 Skipping row 5...发生在一个服务中,它不一定要从 seeds.rb 调用。 ,但可以从任何地方调用。因此,我无法对正确的缩进进行硬编码(无论如何,这听起来是个坏主意)。

一种可能性是保留一个“缩进计数器”,我可以在开始导入文件时增加它并在完成时减少它。我不确定如何从我的应用程序的任何地方访问它,或者这是否是最好的解决方案。有任何想法吗?

最佳答案

更好的解决方案是为您的服务对象提供一个记录器对象以及要处理的数据。这样它就不必了解您的记录器首选项。

并使用类似的东西:

require 'logger'

class IndentedLogger < Logger

INDENTATION_STR = ' '.freeze
attr_accessor :indentation

def initialize(io, *args, **params)
self.indentation = 0
super
end

def indented
return self.dup.tap{|l| l.indentation += 1 } unless block_given?
self.indentation += 1
yield self
self.indentation -= 1
end

protected

def format_message(severity, datetime, progname, msg)
(@formatter || @default_formatter).call(severity, datetime, progname, "#{INDENTATION_STR*indentation}#{msg}")
end

end

# Example:
logger = IndentedLogger.new(STDOUT)

logger.info "Foo"
logger.indented{
logger.info "Foo"
logger.indented.info "Indented even more"
}
logger.info "Foo"

和服务电话 - YourService.new(some_data, logger: logger.indented).process_or_whatever

关于ruby-on-rails - Rails 日志中的缩进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52983137/

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