monolog 日志
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 日志的更多相关文章
- lumen 错误&日志
1.简介 开始一个新的Lumen项目的时候,错误和异常处理已经默认为你配置好了.此外,Lumen还集成了提供各种功能强大日志处理器的Monolog日志库. 2.配置 2.1 错误详情 配置文件.env ...
- Lumen框架-错误&日志
介绍 当你开始一个新的Lumen项目的时候,错误和异常功能,已经在框架中注入了.此外,Lumen还集成了Monolog日志函数,支持和提供多种强大的日志处理功能. 配置 错误详情 大量的错误信息在你的 ...
- php 日志模块源码解析
php日志模块设计 Monolog 是PHP的一个日志类库解析 整体介绍:monolog日志模块遵循 PSR3 的接口规范.主要有日志格式类接口(格式化日志信息),处理类接口(写日志的驱动,通过扩展写 ...
- laravel的monolog使用
Laravel 集成了 Monolog 日志函数库,Monolog 支持和提供多种强大的日志处理功能. 1.设置,日志模式 (1)Laravel 提供可立即使用的 single.daily.syslo ...
- monolog封装
做一下基本关于Monolog的基本介绍: Monolog是基于PHP的日志类库. 介绍就到这,言归正传 安装 安装最新版本:(composer 还没安装的~:https://www.phpcompos ...
- Composer使用
是什么 如果你知道yum.apt-get.npm.bower等命令中的一种或者多种,那么,你也能很快知道composer是什么了.没错,它就是PHP里快速安装类库的.平时,我们安装一个PHP类库,需要 ...
- Composer : php依赖管理工具
原始时代 我记得在当时用php的时候还没有composer,只有个pear,但是不好用呀,还不如直接在互联网上到处复制代码了,更快更不容易出错,当时也没有github这么好的社区工具了 总结如下 代码 ...
- Composer PHP 依赖管理工具
composer 是 PHP 用来管理依赖(dependency)关系的工具.你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件. 依赖管理 ...
- lumen
HTTP路由 基本路由 路由参数 必填参数 可选参数 正则表达式约束 命名路由 路由组 中间件 命令空间 路由前缀 基本路由 你可以在 route/web.php 文件中定义应用程序的全部路由.最基本 ...
随机推荐
- Linux设备驱动模型简述(源码剖析)
1. Linux设备驱动模型和sysfs文件系统 Linux内核在2.6版本中引入设备驱动模型,简化了驱动程序的编写.Linux设备驱动模型包含设备(device).总线(bus).类(class)和 ...
- JVM运行时数据区--方法区
运行时数据区结构图(温习): 堆.栈.方法区的交互关系 方法区的理解 方法区(Method Area)与Java堆一样,是各个线程共享的内存区域 方法区在JVM启动时就会被创建,并且它的实际的物理内存 ...
- python的多行注释
单行注释# 多行注释""
- tensorflow-GPU配置
在使用GPU版的TensorFlow跑程序的时候,如果不特殊写代码注明,程序默认是占用所有主机上的GPU,但计算过程中只会用其中一块.也就是你看着所有GPU都被占用了,以为是在GPU并行计算,但实际上 ...
- (转)HttpServletResquest对象
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息. 1 ...
- (转)Java中的值传递和引用传递
Java中的值传递和引用传递 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答:是值传递.Java 编程语言只有值 ...
- 017 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 11 变量综合案例
017 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 11 变量综合案例 本文知识点:变量 相同类型的变量可以一次同时定义多个 例:可以一行代码同时定义2个变量x ...
- Arduino 与 SPI 结合使用 以及SPI 深层理解
本文主要讲解两部分内容,不做任何转发,仅个人学习记录: 一. Arduino 与 SPI 结合使用 : 二. SPI 深层理解 有价值的几个好的参考: 1. 中文版: https://blog.cs ...
- VS 高级版本新建的项目如何降级使低版本 VS 可以打开
转载:https://blog.csdn.net/u012814856/article/details/70325267 一.引言 这里因为工作的原因,公司项目使用的是 VS2015 的编译环境,但是 ...
- puts()和gets()函数
puts()和gets()函数 1. puts()函数 puts()函数用来向标准输出设备(屏幕)写字符串并换行, 其调用格式为: puts(s); 其中s为字符串变量(字符串数组名或字符串指针). ...