spazzmarticus/monolog-batchstreamhandler

一次性将一批记录推送到流中。

3.0.0 2022-09-14 09:28 UTC

This package is auto-updated.

Last update: 2024-09-14 13:45:40 UTC


README

A Monolog 处理器,它接受一批记录并将它们一次性推送到流中。

(使用 ^2.0 或 Monolog ^2.0 和 ^1.0 对应 Monolog ^1.x)

原因

当对 Web 服务器进行日志记录调用时,我喜欢将一个调用的所有日志记录分组在一起。我将默认的 StreamHandler 改为只处理记录批次(handleBatch)并将它们一次性写入到流中——就这样,出现了 BatchStreamHandler

安装

使用以下命令安装

composer require spazzmarticus/monolog-batchstreamhandler

用法

use SpazzMarticus\BatchStreamHandler\BatchStreamHandler;
use Monolog\Handler\BufferHandler;
use Monolog\Logger;

$batchStreamHandler = new BatchStreamHandler('supsi-looking.log');

//Optional - Envelop the records with head and foot lines
$batchStreamHandler->pushHeadLine('-------');
$batchStreamHandler->pushFootLine('=======');

$bufferHandler = new BufferHandler($batchStreamHandler);

$logger = new Logger('supsi');
$logger->pushHandler($bufferHandler);

//PewPew - Do your stuff here

StreamHandlerBatchStreamHandler

默认的 StreamHandler 会立即将每条记录推送到流中。即使放在 BufferHandler(它将记录缓存在 flush() 被调用之前)之后,每条记录也会单独处理并写入到流中。

假设有三个并行调用到 Web 服务器 ABC

  ------------------- Time ------------------->
A --[Debug]------[Notice]--------[Error]---|
B -[Warning][Warning]---------------|
C -----[Notice][Error]------------------------|

日志看起来像这样

Warning
Debug
Notice
Warning
Error
Notice
Error

这使得查看特定调用发生的事情变得困难。

使用 BatchStreamHandler 的日志看起来像这样

Warning
Warning
Debug
Notice
Error
Notice
Error

这仍然不是很好,所以我添加了头部和尾部行进行封装。

现在这看起来就像我可以工作的日志了

-------
Warning
Warning
=======
-------
Debug
Notice
Error
=======
-------
Notice
Error
=======