>백엔드 개발 >PHP 튜토리얼 >PHP 마스터 | 재사용 성을 향상시키기 위해 PSR-3으로 로깅

PHP 마스터 | 재사용 성을 향상시키기 위해 PSR-3으로 로깅

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌원래의
2025-02-24 10:42:15977검색

PHP Master | Logging with PSR-3 to Improve Reusability

코어 포인트

일반적인 로그 오브젝트 인터페이스 인 PSR-3을 통해 개발자는 특정 로그 구현에 의존하지 않고 재사용 가능한 코드를 작성하여 PHP의 다른 로그 라이브러리 간의 호환성을 향상시킬 수 있습니다.

방법을 제공합니다. 그것의 설계는 로그 구현 비 호환성 문제를 해결하는 것입니다.
  • PSR-3에는 많은 이점이 있지만 일부 로그 라이브러리는 기본적으로 지원하지 않습니다. 그러나 개발자는 어댑터 모드를 활용하고 PSR/로그 라이브러리에 제공된
  • 클래스를 확장하여 PSR-3 호환 어댑터를 만들 수 있습니다.
  • Monolog, Symfony 및 Mustache.php를 포함한 많은 주요 PHP 프로젝트가 PSR-3에 대한 지원을 추가했습니다. 코드 재사용의 장벽을 줄이면 더 많은 라이브러리와 프레임 워크가 로깅을 올바르게 사용할 것으로 예상되어 개발자에게 유용한 정보를 제공합니다. log()

  • PHP 개발에서 로깅은 가장 일반적인 작업 중 하나입니다. 로그를 사용하여 오류 메시지를 추적하고 중요한 이벤트 및 디버그 코드 문제를 추적합니다. 모든 PHP 프로젝트에서 코드에는 이러한 작업을 처리하는 로그 라이브러리로의 통화로 채워질 수 있습니다. 불행히도, 로그 라이브러리에 대한 통화는 코드 전체에 흩어져있어 코드가 라이브러리의 가용성에 따라 달라집니다. 종속성 주입을 사용하여 객체가 로그 라이브러리에 액세스 할 수있게하더라도 로그 라이브러리의 차이는 이들 사이를 전환하는 것이 어려울 수 있고 시간이 많이 걸릴 수 있으며 전체 코드 라이브러리의 주요 리팩토링이 필요하다는 것을 의미합니다. 로그 라이브러리 간 호환성을 향상시키기 위해 PHP-FIG 팀은 최근 공통 로그 객체 인터페이스 인 PSR-3을 출시했습니다. 이 기사에서는 PSR-3 정의 로그 인터페이스가 특정 로그 구현에 의존하지 않는 재사용 가능한 코드를 작성할 수있는 방법에 대해 설명합니다.
  • AbstractLogger psr-3 빠른 시작
  • PSR-3이 코드를보다 재사용 할 수있는 방법을 이해하기 전에 PSR-3이 무엇인지 이해해야합니다. 이미 PSR-3에 익숙하다면이 섹션을 건너 뛸 수 있습니다. 사양의 핵심은 객체를 로그하는 인터페이스입니다. 이 인터페이스는 다른 심각도 수준의 메시지를 처리하는 8 가지 방법과 심각도 수준을 수용 할 수있는 일반적인
  • 방법을 공개합니다. PSR-3에 의해 지원되는 8 가지 심각도 수준은 아래에 설명 된 바와 같이 RFC 5424를 기반으로합니다.
    • - 시스템을 사용할 수 없습니다 - 조치가 필요합니다 emergency - 심각한 상황
    • - 즉각적인주의가 필요하지 않지만 모니터링 해야하는 오류
    • - 비정상적이거나 바람직하지 않은 이벤트이지만 오류는 아닙니다 alert - 정상이지만 중요한 이벤트
    • - 흥미로운 이벤트 critical - 디버깅에 대한 세부 사항
    • 각 로그 메소드는 문자열이어야하는 메시지 또는 error
    • psr-3 파일을 받으
    • PSR -3을 사용하는 데 필요한 파일을 얻는 것은 쉽습니다. PSR/Log GitHub 리포지토리에서 찾을 수 있습니다. Composer를 사용하여 Packagist에서 이러한 파일을 얻을 수도 있습니다. 다음은 psr/log 파일을 검색하기위한 warning 파일의 예입니다.
    • 로깅의 코드 재사용을 제한하는 방법 notice PHP에는 데이터를 수집하고 기록하는 방법이 각각 다양한 로그 라이브러리가 있습니다. 그들은 약간의 공통점이 있지만 각 라이브러리에는 고유 한 로깅 방법 세트가 있습니다. 즉, 로그 사이를 전환하는 것은 어려울 수 있으며, 종종 로깅이 사용되는 곳마다 코드를 변경해야합니다. 이것은 코드 재사용 및 객체 지향 설계의 견고한 원리와 상반됩니다. 우리가 직면 한 상황은 특정 로그 라이브러리에 대한 종속성을 선언하거나 전체 로그인을 피하는 것입니다. 이 문제를보다 명확하게 설명하기 위해서는 구체적인 예가 필요합니다. 전자 메일 전송을 처리하기 위해 간단한 메일러 개체를 작성한다고 가정 해 봅시다. 우리는 이메일을 보낼 때마다 Mailer가 메시지를 로그인하기를 원하며, 우수 독백 라이브러리를 사용하여 벌목 요구를 처리하기로 결정했습니다.
    • 우리는 다음 코드와 함께이 클래스를 사용할 수 있습니다 : info
    • 이 코드를 실행하면
    • 파일에 새 항목이 생성되어 전송 된 이메일을 기록합니다. 이 시점에서 우리는 재사용 가능한 메일러 개체를 작성했다고 생각할 수 있습니다. 우리는 종속성 주입을 사용하여 메일러에 로거를 사용할 수있게하므로 메일러 코드를 터치하지 않고도 다른 로거 구성을 교환 할 수 있습니다. 우리는 확실한 원칙을 성공적으로 따르고 어려운 종속성을 피하는 것을 피하는 것 같습니다. 그러나 로깅 상호 작용을 처리하기 위해 아날로그를 사용하여 다른 프로젝트에서 메일러 클래스를 재사용하고 싶다고 가정 해 봅시다. 아날로그에는 debug 메소드가 없기 때문에 이제 문제가 있습니다. 아날로그를 사용하여 정보 수준 메시지를 녹음하려면
    • 를 호출합니다. Mailer 클래스를 수정하여 아래 그림과 같이 아날로그 방법을 사용할 수 있습니다.

    우리는 다음 코드와 함께 업데이트 된 메일러 클래스를 사용할 수 있습니다.

    <code class="language-json">{
        "require": {
            "psr/log": "dev-master"
        }
    }</code>
    이것이 효과가 있지만 이상적이지 않습니다. 우리는 특정 로깅 구현에 대한 Mailer의 의존성을 만났으며, 새로운 로거를 도입 할 때 클래스를 변경해야합니다. 이로 인해 클래스는 재사용 가능성이 떨어지고 특정 로거의 가용성에 의존하거나 클래스의 벌목을 포기하는 것 중에서 선택해야합니다.

    로그거 의존성을 피하려면 psr-3을 사용하십시오 Alejandro Gervasio가 주제에 대한 그의 훌륭한 기사에서 의존성 반전의 원칙은 구체적인 구현보다는 추상화에 의존해야한다고 알려줍니다. 로깅의 경우, 현재의 문제는 의존 할 수있는 적절한 추상화가 부족했습니다. 이것은 PSR-3이 시작되는 곳입니다. PSR-3은 로거 (적절하게 명명 된

    )에 대한 공통 인터페이스를 제공하여 로깅 구현의 비 호환성을 극복하도록 설계되었습니다. PSR-3을 사용하면 특정 로거에 의존하지 않는 인터페이스를 제공함으로써 PSR-3 호환 로거를 얻으려면 프롬프트를 입력 할 수 있습니다. 다음을 보여주기 위해 다음 메일러 클래스를 업데이트했습니다. 생성자는 구현자를 수락하도록 수정되었으며 메소드는 이제 psr-3에 지정된 메소드를 호출합니다. 독백은 이미 PSR-3을 준수하고 아날로그는

    를 구현하는 래퍼 객체를 제공하므로 이제 메일러 클래스를 수정하지 않고이 두 로거를 사용할 수 있습니다. 독백을 사용 하여이 클래스를 호출하는 방법은 다음과 같습니다.

    및 아날로그를 사용하십시오 : LoggerInterface 이제 우리는 Mailer 클래스를 편집하거나 사용 방식을 변경하지 않고 모든 라이브러리와 함께 메일러 객체를 사용할 수 있습니다. LoggerInterface psr-3 를 지원하지 않는 로거에 어댑터 모드를 사용하십시오. 지금까지, 우리는

    <code class="language-php"><?php namespace Email;
    
    class Mailer
    {
        private $logger;
    
        public function __construct($logger)
        {
            $this->logger = $logger;
        }
    
        public function sendEmail($emailAddress)
        {
            // 发送电子邮件的代码...
    
            // 记录消息
            $this->logger->addInfo("Email sent to $emailAddress");
        }
    }</code>
    를 요청하는 구현자를 통해 특정 로깅 구현에서 메일러 객체를 성공적으로 분리했습니다. 그러나 PSR-3 지원을 위해 아직 추가되지 않은 로거는 어떻습니까? 예를 들어, 인기있는 Klogger 라이브러리는 한동안 업데이트되지 않았으며 현재 PSR-3과 호환되지 않습니다. 다행스럽게도 어댑터 패턴을 활용하여 Klogger에 의해 노출 된 방법을 에 정의 된 8 개의 레벨 별 로그 방법을 공통 LoggerInterface 메소드로 전달합니다. 클래스를 확장하고 자신의 메소드를 정의함으로써 PSR-3을 기본적으로 지원하지 않는 로거에 대한 PSR-3 호환 어댑터를 쉽게 만들 수 있습니다. Klogger에 대한 간단한 어댑터를 만들어 아래에서 이것을 시연 할 것입니다 : sendEmail().
    <code class="language-json">{
        "require": {
            "psr/log": "dev-master"
        }
    }</code>

    메소드는 단순히 log() 메소드를 해당 Klogger 메소드에 매핑하고 Klogger는 실제 로깅 활동을 처리합니다. Klogger 클래스를 이런 식으로 마무리함으로써 LoggerInterface 계약을 중단하지 않고 사용할 수 있습니다. 이제 메일러 클래스와 함께 Klogger 어댑터를 사용할 수 있습니다. LoggerInterface 어댑터 클래스를 사용하면 Mailer 클래스를 수정하지 않고도 Klogger를 사용할 수 있으며 여전히

    를 준수 할 수 있습니다. Klogger는 디버그 레벨 메시지의 두 번째 매개 변수를 허용하지 않으므로 어댑터로도 PSR-3을 완전히 준수하지 않습니다. PSR-3과 완전히 호환되도록 Klogger를 확장하는 것은 사소한 작업이지만이 기사의 범위를 벗어납니다. 그러나 어댑터 클래스를 사용하면 PSR-3을 완전히 준수하는 데 매우 가까워지고 Klogger 클래스와 함께
    <code class="language-php"><?php namespace Email;
    
    class Mailer
    {
        private $logger;
    
        public function __construct($logger)
        {
            $this->logger = $logger;
        }
    
        public function sendEmail($emailAddress)
        {
            // 发送电子邮件的代码...
    
            // 记录消息
            $this->logger->addInfo("Email sent to $emailAddress");
        }
    }</code>
    를 사용할 수 있다고 말하는 것이 안전합니다.

    결론 LoggerInterface LoggerInterface 이 기사에서는 PSR-3을 사용하여 특정 로깅 구현에 의존하지 않는 로거가없는 코드를 작성하는 방법을 배웠습니다. 많은 주요 PHP 프로젝트는 독백, Symfony 및 Mustache.php를 포함한 PSR-3에 대한 지원을 추가했으며 Drupal과 같은 다른 잘 알려진 프로젝트는이를 가장 잘 통합하는 방법에 대해 논의하고 있습니다. PSR-3은 코드 재사용의 장벽을 줄이기 때문에 더 많은 라이브러리와 프레임 워크가 로깅을 올바르게 사용하여 개발자에게 유용한 정보를 제공해야합니다. PSR-3이 애플리케이션에서 로깅을 사용하는 방법에 영향을 미칩니 까? 아래 의견 섹션에 알려주십시오.

    (Fotolia의 그림) (PSR-3 로깅의 FAQ 부분은 공간 제한으로 인해 여기에서 생략됩니다. 필요에 따라 추가 할 수 있습니다.)

  • 위 내용은 PHP 마스터 | 재사용 성을 향상시키기 위해 PSR-3으로 로깅의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.