p.m*_*los 2 logging ruby-on-rails ruby-on-rails-3.2
在使用 Rails 3.2 进行日志记录时,我想记录日志条目所在的文件名和行号。
因此,如果在我的在线 ruby 脚本中customer.rb我23有一个类似以下的日志:
Rails.logger.debug "Debug message"
Run Code Online (Sandbox Code Playgroud)
我希望日志记录如下内容:
[customer.rb:23] Debug message
Run Code Online (Sandbox Code Playgroud)
那可能吗?
我终于找到了最好的解决方案,它也会影响我的应用程序正在使用的其他 gem 的日志格式,如下所示:
Logger::SimpleFormatter并重写该方法call。您可以在初始化文件 ( config/initializers) 中执行此操作。call更改记录文件和行的方法caller[5]。这是一个对我有用的示例实现:
class Logger::SimpleFormatter
def call(severity, time, progname, msg)
call_details = Kernel.caller[5].gsub(/#{Rails.root}/, '')
call_details.match /(.+):(.+):/
filename = $1
line = $2
length = 40
filename = "#{filename[-length, filename.length]}" if filename.length >= length
filename = filename.rjust(length + 2, '.')
"[#{severity} #{time} #{filename}:#{line}] #{msg}\n"
end
end
Run Code Online (Sandbox Code Playgroud)
在上面的解决方案中,我还将文件名限制为最后 40 个字符,以避免打印大文件路径。
| 归档时间: |
|
| 查看次数: |
2254 次 |
| 最近记录: |