평범한 이야기들

[PHP] monolog 사용하기 본문

평범한 개발 이야기/PHP

[PHP] monolog 사용하기

songsariya 2021. 11. 25. 16:01
728x90

PHP에서 로그 남기기

PHP에서 로그를 남길 때 보통 파일을 열어서 var_dump, print_r, echo, sys_log, error_log 등을 이용하는 경우가 많이 있습니다. 좀 더 쉽게 로그를 작성하기 위해서 monolog 란 로깅 프레임워크를 설치해서 사용하려고 합니다.

 

Monolog란?

PSR-3을 준수하고 있는 로깅 프레임워크입니다. 대부분의 로깅 플랫폼과 연결할 수 있는 핸들러를 제공해주며 RFC 5424(Syslog Protocol)에 정의된 로그 레벨을 모두 지원하고 있습니다.

DEBUG(100)
INFO(200)
NOTICE(250)
WARNING(300)
ERROR(400)
CRITICAL(500)
ALERT(550)
EMERGENCY(600)

 

설치 방법

PHP Composer로 관리할 수 있는 라이브러리이므로 Composer를 이용하여 설치합니다.

$ composer require monolog/monolog

 

사용방법

우선 namespace를 추가합니다.

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

요즘은 다 자동으로 삽입을 해주기 때문에 크게 신경을 쓰지 않으셔도 됩니다.

다음으로는 객체를 생성해줍니다.

$logger = new Logger("Application");

그 후 핸들러를 추가합니다.

$logger->pushHandler(new StreamHandler(__DIR__ . "/logs/debug.log",Logger::DEBUG));

그 후 아래와 같은 함수를 호출해 로그를 쌓을 수 있습니다.

$logger->debug('Welcome To Monolog');
$logger->info('Welcome To Monolog');
$logger->notice('Welcome To Monolog');
$logger->warning('Welcome To Monolog');
$logger->error('Welcome To Monolog');
$logger->alert('Welcome To Monolog');
$logger->emergency("Welcome To Monolog");

핸들러를 만들 때 로그 레벨을 DEBUG로 설정했기 때문에 위 함수들의 내용들이 전부 찍히게 됩니다. 만약 핸들러의 로그 레벨을 NOTICE로 설정을 했다면 debug, info 메서드는 호출이 되어도 실제 로그가 저장되지 않습니다.

 

SLACK 핸들러 추가

저는 슬랙을 이용해서 다양한 로그정보를 받습니다. 그래서 monolog를 이용한 슬랙 사용법입니다. 위와 동일하게 객체를 생성한 후에 슬랙 핸들러를 추가해주시면 됩니다.

$logger->pushHandler(new SlackWebhookHandler($webhook_url, $channel, $username, false, null, false, false, Logger::DEBUG));

웹 훅 url과 채널, 봇 이름 등을 설정하실 수 있습니다. 그리고 동일한 메서드를 호출하면 슬랙으로 메시지가 잘 오는 것을 확인할 수 있습니다.

 

포맷 설정하기

가장 기본으로 설정을 하면 기본 LineFormatter로 한 줄 입력이 되는 포맷을 사용하게 됩니다. 해당 포맷을 사용자에 맞게 작업을 하려면 포맷을 재설정해주어야 합니다.

// 객체생성
$logger = new Logger("Application");

// 핸들러 설정
$handler = new StreamHandler(__DIR__ . "/logs/debug.log",Logger::DEBUG);

// 핸들러에 포맷설정
$handler->setFormatter(new LineFormatter("[%datetime%] [%level_name%] %message% [%context%]\n","Y-m-d H:i:s",true));

// 핸들러 추가
$this->logger->pushHandler($handler);

위와 같이 포맷을 설정해주시면 원하시는 포맷으로 변경되어 로그가 저장됩니다.

이 외에도 다양한 핸들러와 기능들이 많이 존재합니다. monolog공식 사이트에서 확인해보시면 될 듯합니다.

728x90
Comments