monolog使用案例

1.首先要执行
composer require monolog/monolog
2.案例
<?php
require_once './vendor/autoload.php';

use Monolog\Logger;
use Monolog\Handler\RedisHandler;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\BrowserConsoleHandler;
use Monolog\Processor\WebProcessor;
use Monolog\Processor\IntrospectionProcessor;

use Monolog\Formatter\JsonFormatter;

$logfilename = "/data/logs/default/" .date('YmdH').".log";
$redis = new Redis();
$redis->connect('192.168.56.101',6379);
$key  = 'monolog';

$stream = new StreamHandler($logfilename,Logger::ERROR);
$stream->setFormatter(new JsonFormatter());

$redishandle = new RedisHandler($redis,$key,Logger::INFO);

$browserhandle = new BrowserConsoleHandler(Logger::INFO);

$channel1 = 'test';

$log = new Logger($channel1);
$log->pushHandler($stream);
$log->pushHandler($redishandle);
$log->pushHandler($browserhandle);

$log->pushProcessor(new WebProcessor());
$log->pushProcessor(new IntrospectionProcessor());


$log->info('info', ['a' => 'test']);
$log->error('error');

monolog使用解析

1.channel渠道、通道
可以区分同项目不同模块日志

2.handler处理器
一个channel设置多个handler,是按照堆栈的方式依次调用(后进先出,最后调用的先执行),方便将日志发送多个接收器(redis、elasticsearch、syslog等)
备注:可以自己根据自己需求实现handler

3.processor扩展信息
一个channel可以附带一些扩展信息,可以用来补充一些额外信息(内存、进程、服务器IP等信息)也可以用来记录上下文信息
备注:可以自己根据自己需求实现processor,上下文信息也可以使用扩展的数组传递

4.formatter格式化信息
每个handler可以设定特定的格式化信息(默认是LineFormatter)
备注:可以自己根据自己需求实现formatter

5.level日志等级
每个handler设定处理特定级别的日志

DEBUG(100)详细的DBUG信息
INFO(200) 提示信息,感兴趣的信息
NOTICE(250)通知信息,重大意义的信息
WARNING(300)警告信息,异常信息
ERROR(400)错误信息
CRITICAL(500)关键错误信息,内部组件错误
ALERT(550)依赖服务不可以用,例如数据库故障灯
EMERGENCY(600)系统不可用
备注:错误日志数字越大,表示错误越严重,如果一个handler设置的日志级别较低则可以处理较高级别的日志信息