Symfony 로그 파일은 모든 환경에서 동일한 방식으로 형식화됩니다. 이는 dev.log
사람이 아닌 기계에 최적화되어 있음을 의미합니다. 결과적으로 로그 파일은 쓸모없는 정보로 가득 차서 생산성이 떨어집니다.
EasyLogHandler 는 인간 친화적인 로그 파일을 생성하는 새로운 Monolog 핸들러입니다. 로그 정보를 명확하고 간결하게 표시하도록 최적화되어 있습니다. 개발 환경에서 이를 사용하여 훨씬 더 생산적인 개발자가 되십시오.
특징
설치
구성 및 사용법
이것은 EasyLogHandler 의 최고의 기능 중 일부이며 기본 Symfony 로그와 비교되는 방법입니다.
Symfony 로그 파일은 거대한 텍스트 스트림입니다. 이를 열면 요청이 언제 시작되거나 완료되었는지, 어떤 로그 메시지가 함께 속해 있는지 쉽게 알 수 없습니다.
심포니 | EasyLogHandler |
---|---|
EasyLogHandler는 로그 파일을 다른 방식으로 구성합니다.
각 요청 로그를 구분하기 위해 큰 헤더와 몇 가지 새로운 줄을 추가합니다.
요청이 덜 중요한 경우(예: 자산 요청) 헤더가 더 간결해지고 더 적은 정보가 표시됩니다.
로그 메시지는 내부적으로 나누어져 있어 다양한 부분(요청, 교리, 보안 등)을 더 잘 이해할 수 있습니다.
우선, EasyLogHandler는 모든 로그 메시지에 타임스탬프를 표시하지 않습니다. dev
환경에서는 이에 대해 신경 쓰지 않아도 되므로 타임스탬프는 각 로그 메시지 그룹에 대해 한 번만 표시됩니다.
심포니 | EasyLogHandler |
---|---|
로그에 대한 세부 정보를 추가하기 위해 일부 로그 메시지에 포함되는 extra
정보는 이전 로그와 다른 경우에만 표시됩니다. 대조적으로 Symfony는 항상 모든 로그에 대한 extra
정보를 표시하여 많은 중복 정보를 생성합니다.
심포니 |
---|
EasyLogHandler |
---|
실제 값 대신 로그 메시지에 자리 표시자를 사용하는 것이 점점 더 대중화되고 있습니다(예: Matched route "{route}".
Matched route "home".
). 이는 기계에 유용합니다. 자리표시자 값.
그러나 인간에게는 이 "특징"이 혼란스럽습니다. 이것이 바로 EasyLogHandler가 로그 메시지에 포함된 모든 자리 표시자를 자동으로 바꾸는 이유입니다.
심포니 |
---|
EasyLogHandler |
---|
지원 중단 및 보안 관련 메시지와 같은 중요한 요소는 즉시 발견할 수 있도록 로그 파일에서 눈에 띄게 표시되어야 합니다. 그러나 Symfony에서는 모든 로그가 정확히 동일하게 보입니다. 무엇이 중요한지 어떻게 알 수 있나요?
심포니 |
---|
(모든 메시지는 정확히 동일하게 보입니다) |
EasyLogHandler |
---|
(지원 중단, 경고, 오류 및 보안 메시지가 눈에 띕니다) |
로그 메시지에는 일반적으로 context
및 extra
속성에 관련 변수가 포함되어 있습니다. 로그 파일에 이러한 변수의 내용을 표시하는 것은 항상 가독성과 간결함 사이에서 균형을 맞추는 데 어려움을 겪습니다.
EasyLogHandler는 각 로그 메시지에 따라 이러한 변수를 동적으로 인라인하는 방법을 결정합니다. 예를 들어 Doctrine 쿼리 매개변수는 항상 인라인되지만 요청 매개변수는 중요하지 않은 요청에 대해 인라인되고 중요한 요청에 대해 중첩됩니다.
로그 메시지에 오류 스택 추적이 포함되어 있으면 반드시 살펴보고 싶을 것입니다. 그러나 Symfony는 스택 추적을 인라인으로 표시하므로 검사가 불가능합니다. EasyLogHandler는 이를 적절한 스택 추적으로 표시합니다.
심포니 |
---|
EasyLogHandler |
---|
로그 파일을 검사할 때 가장 실망스러운 경험 중 하나는 반복되거나 유사한 연속 메시지가 많이 있다는 것입니다. 그들은 정보를 거의 제공하지 않으며 주의를 산만하게 할 뿐입니다. EasyLogHandler는 모든 로그 메시지를 하나씩 처리하지 않고 한 번에 처리하므로 비슷한 연속 로그가 있을 때 이를 인식합니다.
예를 들어, 다음은 세 개의 연속 누락된 번역 메시지를 표시하는 Symfony 로그 파일입니다.
이는 EasyLogHandler에서 동일한 메시지가 표시되는 방식입니다.
일반적으로 수십 개의 연속 메시지를 생성하는 "이벤트 알림" 메시지의 경우 차이점이 더욱 분명해집니다.
심포니 |
---|
EasyLogHandler |
---|
이 프로젝트는 Symfony 번들 대신 PHP 패키지로 배포되므로 Composer를 사용하여 프로젝트를 요구하면 됩니다.
$ 작곡가 필요 --dev easycorp/easy-log-handler
이 로그 핸들러에 대해 애플리케이션에서 새 서비스를 정의하십시오.
최신 Symfony 버전:
# config/packages/dev/easy_log_handler.yamlservices:EasyCorpEasyLogEasyLogHandler:public: falsearguments: ['%kernel.logs_dir%/%kernel.environment%.log']
이전 Symfony 버전:
# app/config/services.ymlservices:# ...easycorp.easylog.handler:class: EasyCorpEasyLogEasyLogHandlerpublic: falsearguments: - '%kernel.logs_dir%/%kernel.environment%.log'
dev
환경에서 Monolog 구성을 업데이트하여 이 새로운 핸들러 서비스를 래핑하는 버퍼링 핸들러를 정의하세요(이유를 이해하려면 계속 읽어보세요). 다음 구성을 안전하게 복사하여 붙여넣을 수 있습니다.
최신 Symfony 버전:
# config/packages/dev/monolog.yamlmonolog:handlers:buffered:type: bufferhandler: easylogchannels: ['!event']level: debugeasylog:type: serviceid: EasyCorpEasyLogEasyLogHandler
이전 Symfony 버전:
# app/config/config_dev.ymmonolog:handlers:buffered:type: bufferhandler: easylogchannels: ["!event"]level: debugeasylog:type: serviceid: easycorp.easylog.handler
대부분의 로그 처리기는 각 로그 메시지를 별도로 처리합니다. 이와 대조적으로 EasyLogHandler 고급 로그 처리에서는 각 로그 메시지가 다른 로그를 인식해야 합니다(예: 유사한 연속 메시지 병합). 이는 요청과 관련된 모든 로그를 일괄적으로 캡처하고 처리해야 함을 의미합니다.
위 구성에서 buffered
핸들러는 모든 로그 메시지를 저장한 후 EasyLog 핸들러로 전달합니다. EasyLog 핸들러는 모든 메시지를 한 번에 처리하고 그 결과를 로그 파일에 기록합니다.
buffered
처리기를 사용하여 기록/제외된 채널과 기록되는 메시지 수준을 구성합니다.