我一直在寻找正确的方法.我遇到了this个链接,上面说logger.error $!, $!.backtrace是一条路要走,但这对我不起作用,log_error是.根据文档,我不知道将第二个参数传递给error方法会如何工作,因为rails使用的ruby logger只接受一个参数.
奇怪的是(或许不是),第二个论点在没有任何口译员抱怨的情况下被接受了.然而,我传递给它的任何东西都被忽略了.
有人能解释我遗漏了什么吗?对错误的第二个论点是什么,以及它的成因有什么见解吗?
我一直在寻找正确的方法.我遇到了this个链接,上面说logger.error $!, $!.backtrace是一条路要走,但这对我不起作用,log_error是.根据文档,我不知道将第二个参数传递给error方法会如何工作,因为rails使用的ruby logger只接受一个参数.
奇怪的是(或许不是),第二个论点在没有任何口译员抱怨的情况下被接受了.然而,我传递给它的任何东西都被忽略了.
有人能解释我遗漏了什么吗?对错误的第二个论点是什么,以及它的成因有什么见解吗?
如果查看ActiveSupport中BufferedLogger类的源代码,就会发现第二个参数是"progname".只有当第一个参数为nil,并且没有为其指定块或块返回非真值时,才使用此选项.
本质上,您不能使用第二个参数来输出额外的内容.
你想做的事情更类似于:
begin
raise
rescue => e
logger.error e.message
logger.error e.backtrace.join("\n")
end
根据日志(log)设置的不同,最好遍历回溯的每一行并单独打印,因为某些记录器不会输出换行符,在这种情况下,您可以执行以下操作:
begin
raise
rescue => e
logger.error e.message
e.backtrace.each { |line| logger.error line }
end