在rails日志上设置ruby

时间:2015-12-17 12:13:30

标签: ruby-on-rails ruby logging

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

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

2 个答案:

答案 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"