스택 추적에서 로그가 예외를 발견했습니다.
만약 내가 PHP에서 예외를 발견하지 못한다면, 나는 나의 컴퓨터에서 유용한 오류 메시지를 받습니다.error.log
스택 추적이 있는 파일입니다.예를 들어, 다음을 실행합니다.
<?php
function foo() {
throw new Exception('Oh no!');
}
foo();
?>
로그에 다음과 같이 기록됩니다.
[3월 06일 수요일 10:35:32 2013] [오류] [클라이언트 86.146.145.175] PHP 치명적 오류:/var/www/test에 'Oh no!' 메시지가 있는 'Exception'이(가) 발견되지 않았습니다.php:4\n스택 추적:\n#0 /var/www/test.foo(7): 4행의 /var/www/test.foo에서 foo()\n#1 {main}\n던져짐
가끔은 예외를 포착하고 싶지만 여전히 그 세부 사항을 기록하고 싶습니다.다음과 같은 것을 상상하고 있습니다.
<?php
function foo() {
throw new Exception('Oh no!');
}
try {
foo();
} catch (Exception $e) {
log_exception($e);
}
?>
어디에log_exception
오류 로그에 기본적으로 감지되지 않은 예외에 대해 자동으로 기록되는 형식과 동일한 형식으로 무언가를 기록합니다. 아마도 문자 그대로 동일할 것입니다.Caught exception
대신에PHP Fatal error: Uncaught exception
.
예외 정보를 이렇게 기록하거나 문자열로 캡처하는 기능이 내장되어 있습니까?비슷한 상상을 하고 있어요traceback.format_exc()
파이썬으로
error_log($e);
당신이 원하는 것을 합니다.처음에 'Uncatched'라는 단어를 제외하고 예외를 감지하지 않았다면 기록되었을 것과 정확히 동일한 내용이 기록됩니다.이것은 클래스의 마법 방법이 반환하는 것이기 때문에 이렇게 합니다.
당신은 이것을 곧 할 수 있습니다.catch
블록:
try {
foo();
} catch (Exception $e) {
error_log("Caught $e");
}
또는 예외 처리기에서:
set_exception_handler(function($exception) {
error_log($exception);
error_page("Something went wrong!");
});
당신은 PHP의 기본 클래스의 메소드를 사용할 수 있습니다.
사용하다getMessage
메시지를 받다Oh no!
및 사용getTraceAsString
형식화된 추적을 가져옵니다.
우리는 애플리케이션에서 로깅을 위해 Monolog를 사용합니다.모노로그에는 스택 추적을 인쇄할 수 있는 포맷터가 있습니다.트레이스로 예외를 기록하려면 LineFormatter를 사용하고 이에 includeStacktraces()를 호출합니다. (아래 코드)
$handler = new \Monolog\Handler\StreamHandler(STDOUT);
$lineFormatter = new \Monolog\Formatter\LineFormatter();
$lineFormatter->includeStacktraces();
$handler->setFormatter($lineFormatter);
$logger = new \Monolog\Logger('root', [$handler]);
try {
//do some throwing
} catch (Exception $e) {
//do some logging, add exception to context
$logger->error($e->getMessage(), ['exception' => $e]);
}
http://php.net/manual/en/function.set-exception-handler.php 을 사용하여 $e->getMessage()에서 메시지를 가져오는 콜백 함수를 등록하고 파일에 덤프할 수 있습니다.
언급URL : https://stackoverflow.com/questions/15245184/log-caught-exception-with-stack-trace
'sourcetip' 카테고리의 다른 글
MySQL FIND_특수 문자가 포함된 IN_SET 함수가 작동하지 않습니다. (0) | 2023.07.27 |
---|---|
Ajax 데이터베이스 업데이트 후 전체 일정으로 이벤트 렌더링 (0) | 2023.07.27 |
JSR 303 Bean Validation을 Spring Data Rest와 함께 사용할 수 있습니까? (0) | 2023.07.27 |
어떤 것이 null을 나타냅니까?정의되지 않은 문자열 또는 빈 문자열 (0) | 2023.07.27 |
Spring 3.0 MVC @ModelAttribute 변수가 URL에 나타나지 않도록 하려면 어떻게 해야 합니까? (0) | 2023.07.27 |