스택 추적을 기록하는 올바른 방법을 찾으려고 노력하고 있습니다. 내가 건너 온 이 그 상태 링크 logger.error을 $! $! 역 추적이 길을 가야하는 것입니다하지만 나를 위해 일을하지 않는 LOG_ERROR 않습니다. 문서에 따르면 레일스에서 사용하는 루비 로거가 단일 인수 만 허용하기 때문에 오류 메서드에 두 번째 인수를 전달하는 방법이 어떻게 작동하는지 알 수 없습니다.
이상하게도 (또는 아닐 수도 있음) 두 번째 주장은 통역사 불만없이 받아 들여집니다. 그러나 내가 전달하는 것은 무시됩니다.
아무도 내가 놓친 것을 설명 할 수 있습니까? 오류에 대한 두 번째 주장이 무엇이며 무엇을 먹고 있는지에 대한 통찰력이 있습니까?
답변
ActiveSupport에서 BufferedLogger 클래스의 소스를 보면 두 번째 인수가 ‘progname’임을 알 수 있습니다. 이것은 첫 번째 인수가 nil이고 블록을 제공하지 않았거나 블록이 참이 아닌 값을 반환하는 경우에만 사용됩니다.
본질적으로 두 번째 매개 변수를 사용하여 추가 항목을 출력 할 수 없습니다.
당신이 원하는 것은 다음과 같은 것입니다.
begin
raise
rescue => e
logger.error e.message
logger.error e.backtrace.join("\n")
end
로깅 설정 방법에 따라 역 추적의 각 줄을 반복하고 특정 로거가 줄 바꿈을 출력하지 않으므로 별도로 인쇄하는 것이 더 좋을 수 있습니다.이 경우 다음과 같은 작업을 수행합니다.
begin
raise
rescue => e
logger.error e.message
e.backtrace.each { |line| logger.error line }
end
답변
이것이 답입니다.
begin
raise
rescue => e
logger.error ([e.message]+e.backtrace).join($/)
end