레일: 예외의 전체 스택 추적 기록
스택 추적을 기록하는 올바른 방법을 찾고 있습니다.logger.error $!, $!.backtrace가 가는 길이지만 log_error가 가는 길은 아니라는 링크를 발견했습니다.설명서에 따르면 레일에서 사용하는 루비 로거는 단일 인수만 허용하기 때문에 오류 방법에 두 번째 인수를 전달하는 것이 어떻게 작동하는지 알 수 없습니다.
이상하게도 (아마도) 두 번째 주장은 통역사의 불평 없이 받아들여집니다.하지만 제가 전달하는 모든 것은 무시됩니다.
누가 제가 무엇을 놓쳤는지 설명해주실 수 있나요?오류에 대한 두 번째 주장이 무엇을 위한 것이고 무엇을 먹는 것인지에 대한 통찰력이 있습니까?
ActiveSupport에서 Buffered Logger 클래스의 소스를 보면 두 번째 인수가 'programname'임을 알 수 있습니다.이 값은 첫 번째 인수가 0이고 블럭을 지정하지 않았거나 블럭이 참이 아닌 값을 반환한 경우에만 사용됩니다.
기본적으로 두 번째 매개 변수를 사용하여 추가 항목을 출력할 수 없습니다.
다음과 같은 작업을 수행할 수 있습니다.
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
kuboon의 답변에 따르면 이 로그 형식은 일반적이며 로그 파일의 오류를 분류하는 데 유용합니다.
begin
raise
rescue StandardError => e
Rails.logger.error (["#{self.class} - #{e.class}: #{e.message}"]+e.backtrace).join("\n")
end
언급URL : https://stackoverflow.com/questions/3484337/rails-logging-the-entire-stack-trace-of-an-exception
'source' 카테고리의 다른 글
응용 프로그램은 루트 암호(MariaDB)를 사용해야만 연결할 수 있습니다. (0) | 2023.06.06 |
---|---|
데이터 프레임의 열 이름 변경 (0) | 2023.06.06 |
Firebase 분석을 사용하여 Android 조각을 추적하는 방법 (0) | 2023.06.06 |
런타임에 특정 하위 보기에 대해 자동 레이아웃을 사용하지 않도록 설정할 수 있습니까? (0) | 2023.06.06 |
MongoDB는 신뢰할 수 있습니까? (0) | 2023.06.06 |