需求如下:

1.需要一种日记格式,能把同一次请求的日记归在一起,请求间的日记以空行隔开,即使并发操作也不会像laravel默认的日记一样很"被动"的记录(不同请求的日记可能被交替记录).

2.还应该像laravel日记的daily驱动那样,把每天的日记都新建一个文件,并删除旧日记.

--------------------------------------------------

参考一篇文章与laravel日记文档:

https://learnku.com/articles/3567/monolog-optimization-and-elk-friendly-log-format

https://learnku.com/docs/laravel/5.6/logging/1374#creating-custom-channels

文章用的是monolog的BufferHandler继承自StreamHandler的自定义Handler(参考monolog文档),这样可以实现需求1,但是要实现需求2,自定义Handler应该继承自RotatingFileHandler.

要特别注意,调用RotatingFileHandler的write(array $record)方法时,$record一定要有键名为'datetime'的键值对(参考文章传入['formatted'=>$log],我传入['formatted'=>$log, 'datetime'=>\Datetime('now')]).

因为追溯monolog的源码,RotatingFileHandler的write()方法需要在记录日志时根据传入的datetime来判断是否该rotate(即清除过期日记),不传datetime则write()会抛异常,但是日记不是在请求进程中进行的,所以请求能正常被响应(前端不会看到500),但是会发现日记那边却没有任何反应.monolog文档只有StreamHandler的示例,写的有些简单...

monolog跑通后,只用在laravel的config/logging中自定义一个channel(custom驱动),并via刚刚跑通的自定义Handler即可.

记一次monolog的RotatingFileHandler使用的更多相关文章

  1. 记一次Monolog的BufferHandler使用

    laravel中可以设置自定义的日记channel(config/logging中设置),按照laravel-china的一篇文章,把log按一定格式并且以批量的方式写入日志文件: https://l ...

  2. laravel的monolog使用

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

  3. monolog 日志

    1 安装 composer require monolog/monolog 2 使用 // 创建日志服务 $logger = new Logger('my_logger'); // 定义一个handl ...

  4. monolog封装

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

  5. monolog记录日志

    <?php require_once 'vendor/autoload.php'; use Monolog\Formatter\LineFormatter; use Monolog\Logger ...

  6. laravel log改为时间格式

    1 providers新建文件 LogRotateServiceProvider.php <?php namespace App\Providers; use Monolog\Formatter ...

  7. lumen配置日志daily模式

    默认的日志保存模式是single 也就是单文件模式 要想改成每日的daily模式可以在bootstrap/app.php下添加: /* * 配置日志文件为每日 */ $app->configur ...

  8. vagrant的学习 之 Laravel

    vagrant的学习 之 Laravel 本文根据慕课网的视频教程练习,感谢慕课网! 慕课视频学习地址:https://www.imooc.com/video/14218. 慕课的参考文档地址:htt ...

  9. 配置lumen的log为daily模式

    1.首先添加服务提供者类LogServiceProvider <?php namespace App\Providers; use Illuminate\Support\ServiceProvi ...

随机推荐

  1. 个人练习:使用HTML+CSS3制作图片轮播功能(不使用JavaScript)

    先上效果图,不要在意用来当素材的图片: 在搜索相关资料的时候,查到有两种实现方式:一是使用JavaScript,二是使用CSS3中的Animation(动画),这里使用的是CSS3中的Animatio ...

  2. MySQL Execution Plan--执行计划中的Type列

    在一次的优化过程中,由于没有关注执行计划中type列,仅看key列来查看"使用到的索引",导致优化过程走了不少弯路. 以下面SQL为例: SELECT wave_no, SUM(I ...

  3. servlet_1

    HttpServlet超类在java构建路径中没有找到 https://jingyan.baidu.com/article/6c67b1d69a37a02787bb1ee2.html ======== ...

  4. spring 普通类注入为null,通过自定义SpringUtils解决

    package com.jathams.spring; import org.springframework.beans.BeansException; import org.springframew ...

  5. 导入tensorflow时DLL load failed: 找不到指定的模块

    简单暴力:卸载 重装 方法一: 先删除:pip uninstall tensorflow 再下载:pip install tensorflow 方法二: 也有可能是numpy版本不匹配的问题: 卸载: ...

  6. ubuntu诸软件安装

    1060显卡驱动安装: sudo apt-get install nvidia-384 ss qt安装:sudo add-apt-repository ppa:hzwhuang/ss-qt5sudo ...

  7. RN 时间戳

    let curTime = Date.now(); 获取到当前时间 curTime: 1555120690696 是指从1970.1.1到现在的毫秒(ms)数 cxk() { //之前时间 let p ...

  8. 用matalb、python画聚类结果图

    用matlab %读入聚类后的数据, 已经分好级别了,例如前4行是亚洲一流, %-13是亚洲二流,-24是亚洲三流 a=xlsread('C:\Users\Liugengxin\Desktop\1.x ...

  9. kill -9 ,kill -12,kill -15

    https://www.cnblogs.com/liuhouhou/p/5400540.html Linux kill -9 和 kill -15 的区别 大家对kill -9 肯定非常熟悉,在工作中 ...

  10. webRTC中音频相关的netEQ(二):数据结构

    上篇(webRTC中音频相关的netEQ(一):概述)是netEQ的概述,知道了它主要是用于解决网络延时抖动丢包等问题提高语音质量的,也知道了它有两大单元MCU和DSP组成.MCU 主要是把从网络收到 ...