1 安装 

composer require monolog/monolog

2 使用

// 创建日志服务
$logger = new Logger('my_logger’); // 定义一个handle
$stream = new StreamHandler(__DIR__.'/log/hello.log', Logger::DEBUG); // 设置输出的格式 // 默认的日期格式是 "Y-m-d H:i:s"
$dateFormat = "Y n j, g:i a"; // 输出格式
$output = "%datetime% > %level_name% > %message% %context% %extra%\n";
$formatter = new LineFormatter($output, $dateFormat);
$stream->setFormatter($formatter); // 把处理器放到对象里面 $this->handles
$logger->pushHandler($stream); // 现在你就可以用日志服务了
$logger->info('My logger is now ready',['hello']); // 日志格式
2020 9 25, 9:43 pm > INFO > My logger is now ready ["hello"] {"name":"brady","dummy":"Hello world!"} 3 其他日志格式 按日期 生成 $logger->pushHandler(new \Monolog\Handler\RotatingFileHandler(__DIR__."/log/hello.log",Logger::DEBUG)); //这个会按天产生日志 hello-2020-09-01.log [2020-09-25T21:43:34.047016+08:00] my_logger.INFO: My logger is now ready ["hello"] {"name":"brady","dummy":"Hello world!"} logstash格式 $stream1 = new StreamHandler(__DIR__.'/log/world.log', Logger::DEBUG);
$logstashformatter = new \Monolog\Formatter\LogstashFormatter("ml","system","test","world");
$stream1->setFormatter($logstashformatter);
$logger->pushHandler($stream1); {"@timestamp":"2020-09-25T21:43:34.047016+08:00","@version":1,"host":"system","message":"My logger is now ready","type":"ml","channel":"my_logger","level":"INFO","monolog_level":200,"test":{"name":"brady","dummy":"Hello world!"},"world":["hello"]} json格式 $stream2 = new \Monolog\Handler\RotatingFileHandler("./log/wang.log");
$json = new \Monolog\Formatter\JsonFormatter();
$stream2->setFormatter($json);
$logger->pushHandler($stream2); {"message":"My logger is now ready","context":["hello"],"level":200,"level_name":"INFO","channel":"my_logger","extra":{"name":"brady","dummy":"Hello world!"},"traceId":"trrrrrrrrr","timestamp":"2020-09-25T21:32:47.958836+0800"}ArrayArrayArray{"message":"My logger is now ready","context":["hello"],"level":200,"level_name":"INFO","channel":"my_logger","datetime":"2020-09-25T21:47:27.521873+08:00","extra":{"name":"brady","dummy":"Hello world!"},"traceId":"trrrrrrrrr"} <?php require "./vendor/autoload.php"; error_reporting(E_ALL);
ini_set('display_errors', '1');
require __DIR__.'/vendor/autoload.php'; use Monolog\Formatter\LineFormatter;
use Monolog\Handler\FirePHPHandler;
use Monolog\Logger;
use Monolog\Handler\StreamHandler; // 创建日志服务
$logger = new Logger('my_logger'); // 定义一个handle
$stream = new StreamHandler(__DIR__.'/log/wei.log', Logger::DEBUG); // 默认的日期格式是 "Y-m-d H:i:s"
$dateFormat = "Y n j, g:i a"; // 输出格式
$output = "%datetime% > %level_name% > %message% %context% %extra%\n";
$formatter = new LineFormatter($output, $dateFormat);
$stream->setFormatter($formatter); // 把处理器放到对象里面 $this->handles
$logger->pushHandler($stream); //第二个处理器 传到hello.log 里面
$logger->pushHandler(new \Monolog\Handler\RotatingFileHandler(__DIR__."/log/hello.log",Logger::DEBUG)); // 处理器 额外的数据给
$logger->pushProcessor(function ($record) {
$record['extra']['dummy'] = 'Hello world!';
return $record;
}); // 第三个处理器
$stream1 = new StreamHandler(__DIR__.'/log/world.log', Logger::DEBUG);
$logstashformatter = new \Monolog\Formatter\LogstashFormatter("ml","system","test","world");
$stream1->setFormatter($logstashformatter);
$logger->pushHandler($stream1); //第四个处理器
$stream2 = new \Monolog\Handler\RotatingFileHandler("./log/wang.log");
$json = new \Monolog\Formatter\JsonFormatter();
$stream2->setFormatter($json);
$logger->pushHandler($stream2); // 处理器 额外的数据给
$logger->pushProcessor(function ($record) {
$record['extra']['name'] = 'brady';
$record['traceId'] = "trrrrrrrrr"; // 好像不行 只能是extra里面 因为record没这个字段
return $record;
}); // 现在你就可以用日志服务了
$logger->info('My logger is now ready',['hello']);

  

最新文章

  1. 用ShareSDK 进行第三方分享
  2. Jenkins学习九:Jenkins插件之构建MSBuild
  3. noip 2016提高组D2T1 problem
  4. 在jfinal中使用druid,并配置查看权限
  5. webpack常用加载器和插件
  6. C++编程命名规则(转载)
  7. MongoDB副本集学习(二):基本测试与应用
  8. linux下安装配置DHCP服务器
  9. java获得项目绝对路径
  10. DB2_001_MQT
  11. LeetCode OJ 33. Search in Rotated Sorted Array
  12. oracle 表 库实例 空间
  13. esLint 配置
  14. 2019.03.29 bzoj3323: [Scoi2013]多项式的运算(非旋treap)
  15. WCF、WebAPI、WCFREST、WebService、WPF之间的区别
  16. ms sqlserver2008r2 自动备份
  17. 当Windows Phone遇到Windows 8
  18. Ubuntu 查看CPU温度
  19. 【python3】集合set (转)
  20. Python【操作EXCEL文件】

热门文章

  1. 通过调用标识符确定this
  2. ASP.NET Core 配置与获取
  3. yum管理——搭建iso镜像私有yum源仓库(1)
  4. axios+Qs请求数据转表单格式
  5. 使用vue-cli(vue脚手架)快速搭建项目-2
  6. idea启动springmvc项目时报找不到类
  7. pwnable.kr-lotto-witeup
  8. XXE漏洞介绍 &amp; XXE漏洞攻击 &amp; 修复建议
  9. 给子元素设置margin-top无效果的一种解决方法
  10. 安卓app功能或自动化测试覆盖率统计(不用instrumentation启动app)