PSR-3

Programming/PHP 2016. 2. 20. 00:30

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($messagearray $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
손가락귀신
정신 못차리면, 벌 받는다.

,