Rails3自定义日志选项?

3

什么是Rails3的“最佳实践”自定义日志选项?有没有人可以推荐好的gem或技术来进行日志记录?

通常情况下,自定义非控制器、非模型内容的惯例是什么?如果我像这样制作自定义日志记录器:

#custom_logger.rb
class CustomLogger < Logger
  def format_message(severity, timestamp, progname, msg)
    "#{msg}\n"
  end
end

logfile = File.open(RAILS_ROOT + '/log/custom.log', 'a')  #create log file
logfile.sync = true  #automatically flushes data to file
CUSTOM_LOGGER = CustomLogger.new(logfile)  #constant accessible anywhere

(摘自这里)那应该放在“/lib”文件夹中的一个文件中吗?在“application.rb”中?还是在初始化程序中?
我似乎找不到任何描述这些与之前Rails版本的小差异的东西。
谢谢
3个回答

2

我把我的代码放在了application.rb文件中,因为它只有几行。我就是这么懒。如果你把你的类放在了lib/文件夹中,你需要手动加载或者设置lib/自动加载。

以下是我的日志记录器代码:

application.rb:

class DreamLogFormatter < Logger::Formatter
  def call(severity, time, progname, msg)
    "[%s(%d)%5s] %s\n" % [time.to_s(:short), $$, severity, msg2str(msg)]
  end
end

....

config.logger = Logger.new(Rails.root.join('log', "#{Rails.env}.log"), 10, 30*1024*1024)
config.logger.formatter = DreamLogFormatter.new

注意,我每30MB滚动一次日志,并保留最后10个日志。


Rails使用BufferedLogger。我在ruby-core邮件列表上读到了一些讨论,似乎相当武断。他们描述的唯一好处是多个进程同时写入时的非交错,但1.9.2的Stdlib Logger类中有一个Mutex,似乎可以实现相同的功能。除了Logger易于更改并具有自动日志滚动之外。如果它成为主要问题,我将只记录到Mongo。 - Duke
请注意 - 如果您在生产中使用多个进程(应该这样做),Logger将交错显示消息。 - Duke

2

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接