[TOC] > [github](https://github.com/Seldaek/monolog) ## 安装 `composer require monolog/monolog` ## 使用 ``` date_default_timezone_set('RPC'); use Monolog\Formatter\LineFormatter; use Monolog\Logger; use Monolog\Handler\StreamHandler; use Monolog\Handler\FirePHPHandler; $dateFormat = "Y-m-d H:i:s"; // 默认的输出格式是 "[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n" $output = "[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n"; // 最后创建一个格式化器 $formatter = new LineFormatter($output, $dateFormat); // 创建一些处理器 $stream = new StreamHandler(__DIR__.'/my_app.log', Logger::DEBUG); $firephp = new FirePHPHandler(); $stream->setFormatter($formatter); // 创建应用的主要日志服务实例 $logger = new Logger('my_logger'); $logger->pushHandler($stream); $logger->pushHandler($firephp); /*设置扩展 %extra% 的值*/ $logger->pushProcessor(function ($record) { $record['extra']['dummy'] = 'Hello world!'; return $record; }); $logger->info("this is a info",['name'=>'asd']);//[2019 10 17, 2:31 am] my_logger.INFO: this is a info {"name":"asd"} {"dummy":"Hello world!"} $logger-> // 使用另外的通道来创建安全相关的日志服务示例 $securityLogger = new Logger('security'); $securityLogger->pushHandler($stream); $securityLogger->pushHandler($firephp); // 或者克隆第一个,只是改变下通道 $securityLogger = $logger->withName('security'); $securityLogger->info("this is a security"); //[2019 10 17, 2:31 am] security.INFO: this is a security [] {"dummy":"Hello world!"} ```