PHP PSR-3 로그 인터페이스 사양

WBOY
풀어 주다: 2016-07-23 08:54:41
원래의
962명이 탐색했습니다.
複製代碼
로그 인터페이스 사양

이 문서는 로그 라이브러리의 일반적인 인터페이스 사양을 공식화합니다.

이 사양의 주요 목적은 로그 라이브러리가 PsrLogLoggerInterface 개체를 수신하여 간단하고 보편적인 방식으로 로그 정보를 기록할 수 있도록 하는 것입니다.
필요한 경우 프레임워크와 CMS 콘텐츠 관리 시스템은 이 인터페이스를 확장할 수 있지만 이 사양을 따라야 합니다. 이렇게 하면 타사 클래스 라이브러리 파일을 사용할 때 로그 인터페이스가 계속 정상적으로 연결할 수 있습니다. .

키워드 "해야 한다"("MUST"), "해서는 안 된다/해서는 안 된다"("MUST NOT"), "필요하다"("필수"),

"할 것이다"("SHALL"), "SHALL NOT"), "SHOULD"), "SHOULD NOT",
"RECOMMENDED", "MAY" ) 및 "OPTIONAL")은 [RFC 2119][]에 자세히 설명되어 있습니다.

이 기사의 구현자는 LoggerInterface 인터페이스를 구현하는 클래스 라이브러리 또는 프레임워크를 의미하며 LoggerInterface의 사용자입니다.

사양

1.1 기본사양
LoggerInterface 인터페이스는 [RFC 5424][]에 정의된 8가지 수준의 로그(디버그, 정보, 알림, 경고, 오류, 중요, 경고 및 긴급)를 기록하는 데 사용되는 8가지 외부 메서드를 정의합니다.

아홉 번째 방법 - log, 첫 번째 매개변수는 레코드 수준입니다. 이 메소드는 미리 정의된 레벨 상수를 매개변수로 사용하여 호출할 수 있으며

반드시 위의 8개 메소드를 직접 호출하는 것과 동일한 효과를 갖습니다. 전달된 수준 상수 매개변수가 사전 정의되지 않은 경우 반드시 PsrLogInvalidArgumentException 유형의 예외를 발생시켜야 합니다. 사용자는 불확실한 상황에서 지원되지 않는 수준 상수를 사용하여 이 메소드를 호출해서는 안 됩니다. 1.2 기록정보

위의 각 메소드는 문자열 유형 또는 __toString() 메소드를 레코드 정보 매개변수로 사용하는 객체를 허용하므로 구현자는 이를 문자열로 처리할 수 있습니다. 그렇지 않으면 구현자는 이를

반드시다음으로 변환해야 합니다. 스스로 끈을 묶으세요.

기록 정보 매개변수

자리 표시자를 전달할 수 있으며, 구현자는 문맥에 따라 다른 항목을 해당 값으로 대체할 수 있습니다.

자리 표시자

컨텍스트 배열의 키 이름과 일치해야 합니다.

자리 표시자 이름

을 여는 중괄호 { 및 닫는 중괄호 }로 묶어야 합니다. 단, 중괄호와 이름 사이에는 공백이 있어서는 안 됩니다.

자리 표시자

의 이름은 A-Z, a-z,0-9, 밑줄 _ 및 영어 마침표로만 구성되어야 하며, 다른 문자는 향후 자리 표시자 사양을 위해 예약되어 있습니다.

구현자

자리 표시자에 대해 다양한 이스케이프 및 변환 전략을 적용하여 최종 로그를 생성할 수 있습니다. 컨텍스트를 모르는 상태에서 사용자는
자리 표시자를 미리 벗어나서는 안 됩니다.

다음은 자리 표시자 사용 예입니다.

    /**
  1. * 기록 정보의 자리 표시자를 상황별 정보로 교체
  2. */
  3. function interpolate($message, array $context = array ( ))
  4. {
  5. // 중괄호 안에 포함된 키 이름의 대체 배열을 구성합니다
  6. $replace = array();
  7. foreach ($context as $key => $val) {
  8. $replace['{' . $key . '}'] = $val;
  9. }
  10. // 레코드 정보의 자리 표시자를 교체하고 최종적으로 수정된 레코드 정보를 반환합니다.
  11. return strtr($message, $replace);
  12. }
  13. // 중괄호 자리 표시자와 함께 레코드 정보를 포함합니다.
  14. $message = "{username} 사용자가 생성됨";
  15. // 대체 정보가 포함된 컨텍스트 배열, 키 이름은 자리 표시자 이름, 키 값은 대체 값입니다.
  16. $context = array('username' => 'bolivar');
  17. // "사용자 이름 bolivar가 생성됨" 출력
  18. echo interpolate($message, $context);
코드 복사1.3 맥락

각 녹음 함수는 문자열 유형으로 표현할 수 없는 정보를 로드하기 위해 컨텍스트 배열 매개변수를 허용합니다. 모든 정보를 로드할 수 있으므로 구현자는 로드하는 데이터에 대해 예외를 발생시키지 않아야 합니다. , 또는 PHP 오류, 경고 또는 알림 메시지(오류, 경고, 알림)를 생성합니다.

Context 매개변수를 통해 Exception 객체가 전달되는 경우

반드시 'Exception'을 키 이름으로 사용해야 합니다. 로깅 예외 정보는 매우 일반적이므로 로깅 클래스 라이브러리 하단에 구현할 수 있다면 구현자가 예외 정보를 제거할 수 있습니다.
물론, 구현자가 이를 사용할 때
반드시 키 이름이 'Exception'인 키 값이 실제로 예외인지 여부를 확인해야 하며, 결국 모든 정보를 로드할 수 있습니다 . 1.4 도우미 클래스와 인터페이스

PsrLogAbstractLogger 클래스를 사용하면 간단히 상속하고 로그 메서드를 구현하여 LoggerInterface 인터페이스를 쉽게 구현할 수 있으며, 나머지 8개 메서드는 로깅 정보와 컨텍스트 정보를 전달할 수 있습니다.

마찬가지로 PsrLogLoggerTrait를 사용할 때는 로그 메소드만 구현하면 됩니다. 그러나 특성 재사용 가능 코드 블록이 인터페이스를 구현하기 전에 LoggerInterface를 구현해야 한다는 점에 유의하는 것이 중요합니다.

사용 가능한 로거가 없는 경우 PsrLogNullLogger 인터페이스는

사용자에게 백업 로그 "블랙홀"을 제공할 수 있습니다. 그러나 컨텍스트 구성에 리소스 집약적인 경우 조건부 확인을 통한 로깅이 더 나은 접근 방식일 수 있습니다.

PsrLogLoggerAwareInterface 인터페이스에는 프레임워크가 모든 로깅 인스턴스에 자동으로 연결하는 데 사용할 수 있는

setLogger(LoggerInterface $logger) 메서드만 포함되어 있습니다.

PsrLogLoggerAwareTrait 특성 재사용 가능 코드 블록은 모든 클래스에서 사용할 수 있으며 동등한 인터페이스는 제공되는 $this->logger를 통해 쉽게 구현할 수 있습니다.

PsrLogLogLevel 클래스는 8개의 로깅 수준 상수를 로드합니다.


위의 인터페이스, 클래스 및 관련 예외 클래스와 일련의 구현 감지 파일이 psr/log 파일 패키지에 포함되어 있습니다.

PsrLogLogger인터페이스


  1. 命名空間PsrLog;
  2. /**
  3. * 日誌記錄實例
  4. *
  5. * 日誌資訊變數 —— message, **必須**是一個字串或是實作了 __toString() 方法的物件。
  6. *
  7. * 日誌資訊變數中**可以**包含格式如「{foo}」 (代表foo) 的佔位符,
  8. * 它將會由上下文數組中鍵名為"foo " 的鍵值替代。
  9. *
  10. * 上下文數組可以攜帶任意的數據,唯一的限制是,當它攜帶的是一個 exception 物件時,它的鍵名 必須 是 "exception"。
  11. *
  12. * 詳情可參考: https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-3-logger-interface-cn.md
  13. */
  14. 接口LoggerInterface
  15. {
  16. /**
  17. * 系統不可用
  18. *
  19. * @param string $message
  20. * @param array $context
  21. * @return null
  22. */
  23. 公用函數Emergency($message, array $context = array());
  24. /**
  25. * **必須**立刻採取行動
  26. *
  27. * 例如:在整個網站都垮掉了、資料庫不可用了或者其他的情況下,**應該**發送一條警報短信把你叫醒。
  28. *
  29. * @param string $message
  30. * @param array $context
  31. * @return null
  32. */
  33. 公用函數>
  34. /**
  35. * 緊急情況
  36. *
  37. * 例如:程式組件無法使用或出現非預期的異常。
  38. *
  39. * @param string $message
  40. * @param array $context
  41. * @return null
  42. */
  43. 公用函數Alert($message, array $context = array());
  44. /**
  45. * 運行時出現的錯誤,不需要立刻採取行動,但必須記錄下來以備檢測。
  46. *
  47. * @param string $message
  48. * @param array $context
  49. * @return null
  50. */
  51. public function critical($message, array $context = array());
  52. /**
  53. * 出現非錯誤性的異常。
  54. *
  55. * 例如:使用了被棄用的API、錯誤地使用了API或非預想的不必要錯誤。
  56. *
  57. * @param string $message
  58. * @param array $context
  59. * @return null
  60. */
  61. 公用函數錯誤($message, array $context = array());
  62. /**
  63. * 一般性重要的事件。
  64. *
  65. * @param string $message
  66. * @param array $context
  67. * @return null
  68. */
  69. 公用函數警告($message, array $context = array());
  70. /**
  71. * 重要事件
  72. *
  73. * 例如:使用者登入和SQL記錄。
  74. *
  75. * @param string $message
  76. * @param array $context
  77. * @return null
  78. */
  79. 公用函數通知($message, array $context = array());
  80. /**
  81. * 除錯詳情
  82. *
  83. * @param string $message
  84. * @param array $context
  85. * @return null
  86. */
  87. public function info($message, array $context = array());
  88. /**
  89. * 任意等級的日誌記錄
  90. *
  91. * @param mixed $level
  92. * @param string $message
  93. * @param array $context
  94. * @return null
  95. * @param array $context
  96. * @return null
  97. */
  98. public function debug( $message, array $context = array());
/** * logger-aware 定義實例*/
public function log($level, $message, array $context = array());

}


複製程式碼
  1. PsrLogLoggerAwareInterface
  2. 命名空間PsrLog;
  3. /**
  4. * 設定一個日誌記錄實例
  5. *
  6. * @param LoggerInterface $logger
  7. * @return null
  8. */
  9. 介面LoggerAInterwareInterface>/**
* 日誌等級常數定義
*/介面LoggerAInterwareInterface> { /***/
public function setLogger(LoggerInterface $logger);

}


複製程式碼🎜>
  1. 複製碼🎜>
  2. 命名空間PsrLog;
  3. /***/
  4. class Logo>
  5. /***/
  6. class Logf
  7. Lef>Level
  8. Level const EMERGENCY = '緊急';
  9. const ALERT = '警報';
  10. const CRITICAL = '嚴重';
const ERROR = '錯誤';
const WARNING = '警告' ; const NOTICE = 'notice'; const INFO = 'info';
const DEBUG = 'debug';

}

轉自Github(PizzaLiu)
PHP、PSR

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿