繁体   English   中英

在Rails日志上设置红宝石

[英]Setting up ruby on rails logs

我正在调查日志记录操作,例如,当您创建一个新用户时,它将其发送到记录器等。因此,每个操作都被记录下来。 我可以看到logger.info如何将信息发送到development.log文件。

我想知道如何设置一个不同的文件(例如users.log),然后在记录行或变量时将其保存在该日志文件中而不是development.log中?

您可以指定配置文件中使用的文件路径,该路径可能因环境而异,如下所示:

config.paths.log = "/some/path/#{Rails.env}.log"

如果要为每个模型创建不同的日志文件,则只需在需要时创建一个logger对象,如本答案所述

但是,如果您只是想根据生成日志的方式标记不同的日志,则使用标记日志记录可能会更容易:

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"

Ruby在其标准库中有一个Logger类: http : //ruby-doc.org/stdlib-2.1.0/libdoc/logger/rdoc/Logger.html

您将实例化该实例并将其传递给新日志文件的文件路径,如下所示:

user_log = File.open('logs/users.log', File::WRONLY | File::APPEND)

您可以将其放置在控制器可以使用的控制器方法中。 第一个字符串参数是日志文件的路径,随后的参数是打开文件以仅用于写入和附加(因此,每个日志行都添加到日志中,而不是每次都覆盖它)。

您可以通过设置格式化程序来自定义每条日志行的格式:

user_log.formatter = proc { |severity, datetime, progname, msg|
  "#{severity}, #{datetime}, #{progname}, #{msg.dump}"
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM