我正在研究日志记录操作,例如,当您创建一个新用户时,它会将其发送到记录器等等。因此记录每个操作。我可以看到logger.info如何将信息发送到development.log文件中。
我想知道如何设置不同的文件,例如users.log然后当我记录一个行或变量时,它会保存在该日志文件中而不是development.log中?
答案 0 :(得分:1)
Ruby在其标准库中有一个Logger
类:{{3}}
您将实例化它并将其传递给新日志文件的文件路径,如下所示:
user_log = File.open('logs/users.log', File::WRONLY | File::APPEND)
您可以将其置于控制器可以使用的控制器方法中。第一个字符串参数是日志文件的路径,以下是打开文件以进行写入和仅追加(以便每个日志行都添加到日志中而不是每次都覆盖它。)
您可以通过设置格式化程序来自定义每个日志行的格式:
user_log.formatter = proc { |severity, datetime, progname, msg|
"#{severity}, #{datetime}, #{progname}, #{msg.dump}"
}
答案 1 :(得分:0)
您可以指定配置文件中使用的文件路径,该路径可能因环境而异,如下所示:
config.paths.log = "/some/path/#{Rails.env}.log"
如果要为每个模型创建不同的日志文件,只需在需要时创建一个记录器对象,如this answer中所述。
但是,如果您只是想根据它们的生成位置以某种方式标记不同的日志,则使用标记日志记录可能更容易:
logger = ActiveSupport::TaggedLogging.new(Logger.new(STDOUT))
logger.tagged("BCX") { logger.info "Stuff" } # Logs "[BCX] Stuff"
logger.tagged("BCX", "Jason") { logger.info "Stuff" } # Logs "[BCX] [Jason] Stuff"
logger.tagged("BCX") { logger.tagged("Jason") { logger.info "Stuff" } } # Logs "[BCX] [Jason] Stuff"