Rails 添加自定义的 Rails Logger

hisea · 2012年08月10日 · 最后由 sagecrow 回复于 2016年07月22日 · 7365 次阅读

Rails 开发很多时候想要吧一些独立的业务处理单独写在一个 log 文件。

Rails 想要新建一个单独的 log 文件是很简单的。

这里我利用单独 logger 来纪录 resque worker 的一些事情。

首先建立一个 logger model

class WorkerLogger < Logger
  def format_message(severity, timestamp, progname, msg)
    "#{timestamp.to_formatted_s(:db)} #{severity} #{msg}\n"
  end
end

然后创建一个 initializer

worker_logfile = File.open("#{Rails.root}/log/worker.log", 'a')
worker_logfile.sync = true
WORKER_LOG = WorkerLogger.new(worker_logfile)

然后就可以到处用了

WORKER_LOG.info "Something happened!"
WORKER_LOG.debug "Something bad really happened!" 

广告: http://hisea.me/p/add-custom-rails-log-file

一些特别的日志,我喜欢写入数据库里面,这样查比较方便

其实关于 logger,我有个问题,原来用 delay_job,production 模式下,Rails.logger 就没效果了,但是好像 development 模式有。 是不是因为 delay_job 其实是开了一个新的进程执行代码的?

#1 楼 @huacnlee 是的,我之前也是懒,写到 Redis 的 Resque 的 key 下面,这样能用 resque-web 查看。

#2 楼 @heliang7 delayed_job 是个独立于 Rails 单独运行的 process, 需要 load Rails 的 environment.

#5 楼 @hisea 那为什么 production 模式下,Rails.logger 就没效果了?

#6 楼 @heliang7 我猜可能是加载 Rails 环境的方法不同。

请问这个 logger model 和 initializer 应该放在那里?WORKER_LOG 是一个局部变量,怎么在任意地方用?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号