Monolog를 사용하여 CodeIgniter 로그 내보내기
13448 단어 CodeIgniter3PHPCodeIgnitermonolog
개요
지금까지 로그의 출력은log4php를 사용했지만, Slack에 대한 알림을 겨냥하여Monolog를 교체해 보았습니다.
컨디션
CodeIgniter 3.1.10
PHP 7.2
Monolog 설치
$ composer require monolog/monolog
혼자 확장 로그 코어 클래스
CodeIgniter에서 응용 프로그램/core에서 파이프라인을 설정하면 기본 핵심 클래스를 혼자 확장하는 것으로 대체할 수 있습니다.
자신이 확장한 핵심 클래스의 클래스나 파일 이름을 접두어로 'MY'탭
이번에는 로그의 핵심 레벨을 확장해야 하기 때문에 클래스 이름은 MY입니다.로그가 됩니다.
application/core/MY_Log.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
use Monolog\Logger;
use Monolog\Handler\RotatingFileHandler;
use Monolog\Formatter\LineFormatter;
class MY_Log extends CI_Log
{
protected $logger;
public function __construct()
{
parent::__construct();
// Monologのチャンネルを作成
$this->logger = new Logger('log');
// 親クラスの設定を引き継ぎログファイル名を指定
$filename = $this->_log_path.'log.'.$this->_file_ext;
// ログローテーションしてくれるハンドラーを使用
$rotate_handler = new RotatingFileHandler($filename);
$rotate_handler->setFormatter(new LineFormatter("%datetime% [%level_name%] %message%\n"));
$this->logger->pushHandler($rotate_handler);
}
/**
* ログ出力
* @param string $level エラーレベル
* @param string $msg メッセージ
*/
public function write_log($level, $msg)
{
// エラーレベルが「debug」「info」「error」であることを前提に実装
$this->logger->{$level}($msg);
}
}
write_로그에 전달된 매개 변수는 'debug' 'info''error '중의 하나이기 때문에 방법 이름으로 직접 사용합니다.오류가 발생한 경우에도 슬랙에 알림
또 오류 레벨이'error'인 경우에도 슬랙에게 알리도록 해 추가했다.
슬랙을 알리기 위해 여러 개의 프로세서를 준비했는데, 이번에는 웹훅 알림을 사용하는 슬랙 웹훅 핸들러를 사용했다.
Slack의 Webhook URL 가져오기
다음 URL에서 Slack과 협력하는 Webhook URL을 가져옵니다.
http:/[알려주고 싶은 작업공간 이름].slack.com/apps/A0F7XDUAZ--incoming-webhook-?next_id=0
config 파일에 설정 추가
가져온 Webhook URL 등을 설정 파일에 추가합니다.
개발 환경과 공식 환경에서 알림 목적지를 바꾸면 개발자와 제품 디렉터리에 config가 있습니다.가장 좋은 것은 php를 설정해서 기술하는 것이다. 이번에는 이 점을 생략하자.
application/config/config.php
$config['endpoint'] = 'https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/xxxxxXXxxXxXXxxXXXXXxx';
$config['username'] = 'エラー通知';
$config['icon'] = ':ghost:';
$config['channels'] = '#notice-error';
알림 Slack으로 변경
application/core/MY_Log.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
use Monolog\Logger;
use Monolog\Handler\RotatingFileHandler;
use Monolog\Handler\SlackWebhookHandler;
use Monolog\Formatter\LineFormatter;
class MY_Log extends CI_Log
{
protected $logger;
public function __construct()
{
parent::__construct();
// Monologのチャンネルを作成
$this->logger = new Logger('log');
// 親クラスの設定を引き継ぎログファイル名を指定
$filename = $this->_log_path.'log.'.$this->_file_ext;
// ログローテーションしてくれるハンドラーを使用
$rotate_handler = new RotatingFileHandler($filename);
$rotate_handler->setFormatter(new LineFormatter("%datetime% [%level_name%] %message%\n"));
$this->logger->pushHandler($rotate_handler);
// 設定を取得
$config =& get_config();
// エラーの場合Slackにも通知する
if (isset($config['slack_endpoint']) && '' !== $config['slack_endpoint']) {
$slack_handler = new SlackWebhookHandler(
$config['slack_endpoint'],
isset($config['slack_channels']) ? $config['slack_channels'] : null,
isset($config['slack_username']) ? $config['slack_username'] : null,
false,
isset($config['slack_icon']) ? $config['slack_icon'] : null,
false,
false,
\Monolog\Logger::ERROR
);
$slack_handler->setFormatter(new LineFormatter("%message%"));
$this->logger->pushHandler($slack_handler);
}
}
/**
* ログ出力
* @param string $level エラーレベル
* @param string $msg メッセージ
*/
public function write_log($level, $msg)
{
// エラーレベルが「debug」「info」「error」であることを前提に実装
$this->logger->{$level}($msg);
}
}
집행되면 이런 느낌으로 알려줄게.참고 자료
https://qiita.com/ichi_system/items/ea07df5eef9763179c70
https://github.com/Seldaek/monolog
https://www.codeigniter.com/user_guide/
Reference
이 문제에 관하여(Monolog를 사용하여 CodeIgniter 로그 내보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/freeneer/items/21a241dd397ce3e96392텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)