PSR-3 : 로거 인터페이스 (http://www.php-fig.org/psr/psr-3/)
Logging 라이브러리에 대한 공통 인터페이스를 설명한다.
Psr\Log\LoggerInterface 인터페이스를 구현하여 간단하게 로그를 기록할 수 있도록 한다.
사용자의 프레임워크나 CMS 에서 이 인터페이스를 확장하려면, 이 문서와 호환성을 유지하도록 한다.
Basic
LoggerInterface 에는 RFC 5424 레벨의 8가지 메소드가 있다. (debug, info, notice, warning, error, critical, alert, emergency).
9번째 메소드인 log 는 첫번째 매개변수로 로그 레벨을 지정할 수 있다.
로그 레벨 상수 중 하나를 지정하여 log 메소드를 호출하는 것은 해당 레벨의 메소드를 호출하는 것과 같은 결과를 가진다.
로그 레벨 상수 없이 log 메소드를 호출하면 Psr\Log\InvalidArgumentException 이 발생한다.
이 외에 임의의 사용자 레벨을 사용하지 않도록 한다.
1 2 3 4 5 6 7 8 | <?php namespace Psr\Log; interface LoggerInterface { public function info($message, array $context = array()); ... | cs |
Message
모든 메소드는 객체(__toString())나 문자열로 된 매개변수(message)를 가진다.
이 때 전달된 객체를 특별히 다룰게 아니라면, 문자열로 캐스팅 해야 한다.
message는 context 배열의 값을 대체할 placeholder 를 포함할 것이다.
Placeholder 이름은 context 배열의 키와 일치해야 하며, 중괄호{}로 구분되어야 한다.
Placeholder 와 구분자 사이에 공백이 없어야 한다.
Placeholder 이름은 A-Z, a-z, 0-9, _(밑줄), .(마침표) 로만 구성하도록 한다.
Context
모든 메소드는 문자열이 아닌 값도 다루기 위해 배열로 된 context 매개변수를 가진다.
context 의 값은 예외나 경고, 에러를 발생시킬 수 없으므로 구현시 가능한 확실하게 처리한다.
context 값으로 Exception 객체가 전달되면, exception 키가 되므로, 구현시 exception 키가 실제 Exception 객체인지 확인해야 한다.
Helper classes and interfaces
- Psr\Log\AbstractLogger
LoggerInterface 를 확장하고, log 메소드를 구현하여 쉽게 logging 할 수 있게 한다.
8가지 메소드들이 log 로 message 와 context 를 전달한다. - Psr\Log\LoggerTrait
Psr\Log\AbstractLogger 와 유사하게 log 메소드만 구현할 수 있게 한다.
trait 는 interface 를 구현할 수 없으므로, 이 경우 LoggerInterface 를 직접 구현해야 한다. - Psr\Log\NullLogger
인터페이스와 함께 제공되며, logger 가 없을 때 로그를 남길 수 있게 한다.
그러나 context 데이터 작성이 어렵다면 조건부 로깅이 더 나을 수 있다. - Psr\Log\LoggerAwareInterface
setLogger(LoggerInterface $logger) 메소드만 가지고 있다.
logger 임시 인스턴스와 연결되도록 프레임워크에서 사용될 수 있다. - Psr\Log\LoggerAwareTrait
모든 클래스에 동일한 인터페이스를 쉽게 구현하도록 한다.
$this->logger 에 접근할 수 있다. - Psr\Log\LogLevel
8가지 로그 레벨 상수를 가진다.
WRITTEN BY
- 손가락귀신
정신 못차리면, 벌 받는다.