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']);

  

monolog 日志的更多相关文章

  1. lumen 错误&日志

    1.简介 开始一个新的Lumen项目的时候,错误和异常处理已经默认为你配置好了.此外,Lumen还集成了提供各种功能强大日志处理器的Monolog日志库. 2.配置 2.1 错误详情 配置文件.env ...

  2. Lumen框架-错误&日志

    介绍 当你开始一个新的Lumen项目的时候,错误和异常功能,已经在框架中注入了.此外,Lumen还集成了Monolog日志函数,支持和提供多种强大的日志处理功能. 配置 错误详情 大量的错误信息在你的 ...

  3. php 日志模块源码解析

    php日志模块设计 Monolog 是PHP的一个日志类库解析 整体介绍:monolog日志模块遵循 PSR3 的接口规范.主要有日志格式类接口(格式化日志信息),处理类接口(写日志的驱动,通过扩展写 ...

  4. laravel的monolog使用

    Laravel 集成了 Monolog 日志函数库,Monolog 支持和提供多种强大的日志处理功能. 1.设置,日志模式 (1)Laravel 提供可立即使用的 single.daily.syslo ...

  5. monolog封装

    做一下基本关于Monolog的基本介绍: Monolog是基于PHP的日志类库. 介绍就到这,言归正传 安装 安装最新版本:(composer 还没安装的~:https://www.phpcompos ...

  6. Composer使用

    是什么 如果你知道yum.apt-get.npm.bower等命令中的一种或者多种,那么,你也能很快知道composer是什么了.没错,它就是PHP里快速安装类库的.平时,我们安装一个PHP类库,需要 ...

  7. Composer : php依赖管理工具

    原始时代 我记得在当时用php的时候还没有composer,只有个pear,但是不好用呀,还不如直接在互联网上到处复制代码了,更快更不容易出错,当时也没有github这么好的社区工具了 总结如下 代码 ...

  8. Composer PHP 依赖管理工具

    composer 是 PHP 用来管理依赖(dependency)关系的工具.你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件. 依赖管理 ...

  9. lumen

    HTTP路由 基本路由 路由参数 必填参数 可选参数 正则表达式约束 命名路由 路由组 中间件 命令空间 路由前缀 基本路由 你可以在 route/web.php 文件中定义应用程序的全部路由.最基本 ...

随机推荐

  1. docker push出现denied: requested access to the resource is denied

    今天想再 把本地的docker image 镜像push 到: https://hub.docker.com/ Step1: login : https://hub.docker.com/ [root ...

  2. JS -- DOM(文档对象模型)

    认识DOM(文档对象模型) DOM(Document Object Model):定义访问和处理HTML文档的标准方法. DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). < ...

  3. Ubuntu16环境安装和使用NFS

    通过NFS服务我们可以方便的读写服务器上的文件,一起来实战Ubuntu16环境安装和使用NFS: 文章概要 本次实战由以下步骤组成: 列举环境信息: 在192.168.119.128安装NFS服务,将 ...

  4. redis入门指南(七)—— 安全、协议、管理工具及命令属性

    写在前面 学习<redis入门指南>笔记,结合实践,只记录重要,明确,属于新知的相关内容. 安全 1.可以使用bind参数绑定一个地址,使redis只接受这个地址的连接. 2.使用requ ...

  5. 搞 Java 的年薪 40W 是什么水平?

    文章首发于[陈树义的博客],点击跳转到原文https://www.cnblogs.com/chanshuyi/p/how_to_earn_400_thousand_per_year.html 我 20 ...

  6. 30种SQL语句优化

    1.'对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用 ...

  7. 爬虫日志监控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替换IP与用户 导读: 现ELK四大组件分别为:Elasticsearch(核心).logstash(处理).filebeat(采集).kibana(可视化) 在elastic官网下载 ...

  8. tornado-简介和原理

    tornado-设计初衷 1. 追求小而精 2. epoll IO多路复用和协程 3. 支持WebSocket 4. 单线程程序(GIL限制,本身某种意义上不启动多进程就是单线程程序) # Pytho ...

  9. Centos-移动文件或目录-mv

    mv 移动文件或者目录,可以用重命名文件或者目录 相关选项 -i 如果文件或目录存在询问是否覆盖,输入y确认,输入n取消 -f 不提示,覆盖

  10. 联赛模拟测试8 Dash Speed 线段树分治

    题目描述 分析 对于测试点\(1\).\(2\),直接搜索即可 对于测试点\(3 \sim 6\),树退化成一条链,我们可以将其看成序列上的染色问题,用线段树维护颜色相同的最长序列 对于测试点\(7\ ...