PSR-3 兼容的日志记录器。

v2.0.0 2022-01-21 17:44 UTC

This package is auto-updated.

Last update: 2024-09-21 23:43:02 UTC


README

Total Downloads Latest Stable Version

mef\Log 是一个针对 PHP 5.5+ 的 PSR-3 兼容日志记录器,旨在尽可能快的同时不牺牲有用的功能。所有功能都整齐地存储在单独的层中,因此您不会因不需要或使用的功能而受到惩罚。(例如,核心日志方法仅由两个简单的 if 语句和调用处理器的日志方法组成。)

示例

输出到 stdout/stderr

<?php
$logger = new \mef\Log\StandardLogger;

// string interpolation works as expected
$logger->notice('This will go to {0}.', ['stdout']);
$logger->error('This will go to {location}.', ['location' => 'stderr']);

输出到文件

<?php
$fileHandler = new \mef\Log\Handler\FileHandler('/var/log/my.log');
$logger = new \mef\Log\StandardLogger($fileHandler);

$logger->notice('This will go to /var/log/my.log');

多个处理器,带过滤

<?php
$debugHandler = new \mef\Log\Handler\Stdout;
$debugHandler->filterHigherThan(Psr\Log\LogLevel::DEBUG);

$fileHandler = new \mef\Log\Handler\FileHandler('/var/log/my.log');
$fileHandler->filterLowerThan(Psr\Log\LogLevel::INFO);

// The handlers could be pushed in any order. Here we are pushing the
// $fileHandler first because in production, there shouldn't be any
// debug messages, and the 'true' parameter will cause the chain handler
// to break early (thus skipping the debug handler) for any message that
// isn't marked DEBUG
$chainHandler = new \mef\Log\Handler\ChainHandler;
$chainHandler->pushHandler($fileHandler, true);
$chainHandler->pushHandler($debugHandler);

$logger = new \mef\Log\StandardLogger($chainHandler);

$logger->notice('This will go to /var/log/my.log');
$logger->debug('This will go to stdout');

更完整的示例可以在 examples 目录中找到。

概述

根据定义,有六个主要对象:

  • mef\Log\Logger - 这是您与之交互最多的核心日志记录器对象。它是 PSR-3 兼容的,因此您可以轻松地与大多数框架一起使用。记录器将大部分工作分配给实现 HandlerInterfaceEntryFactoryInterface 接口的对象,但子类 \mef\Log\StandardLogger 具有合理的默认值,以避免设置一切的麻烦。

  • \mef\Log\Handler\HandlerInterface - 一个执行对条目某些操作的对象。条目对处理器是只读的。它们旨在执行一些有用的操作,例如将条目记录到文件中。

  • \mef\Log\Entry\EntryFactoryInterface - 一个构建日志条目对象(实现 EntryInterface)的对象。

  • \mef\Log\Entry\EntryInterface - 日志消息在通过工厂将其封装到对象之后。这是传递给处理器的。每个日志条目都有一个时间戳、一个错误级别、一条消息、上下文(一个包含任意数据的数组)。

  • \mef\Log\Processor\ProcessorInterface - 在处理器处理日志条目之前修改日志条目。处理器可以更改消息或更改上下文。

  • \mef\Log\Formatter\FormatterInterface - 将日志条目格式化为处理器可以使用的内容。例如,如果使用基于流的格式化程序,则您将使用返回字符串的格式化程序。

日志记录器始终恰好有一个处理器。不可能直接附加多个处理器,也不可能在没有处理器的情况下运行它。但是,如果您需要这些功能中的任何一个,那么 ChainHandlerNullHandler 都是现成的。

一旦创建日志条目(通过调用 $logger->debug、info、warning 等...),日志记录器首先检查是否想要处理该级别。如果不是,则不执行任何操作。(这是通过 FilterTrait 实现的。)在日志记录器级别进行过滤是忽略消息的最高效方式。

假设日志记录器没有过滤掉消息,它将被包装到 \mef\Log\Entry\EntryInterface 对象中,并发送到处理器。如果使用 EntryFactory 且处理器忽略消息,则不会执行字符串插值。然而,总是调用处理程序。

如果处理器对日志条目执行了一些操作,则对消息执行字符串插值(将 $context 数组的一部分嵌入到消息中)。然后处理器可以对条目执行自己的特殊格式化(例如,添加时间戳和严重级别)。

处理器

异类

  • NullHandler - 不做任何事情。除了测试之外,这实际上没有用途。如果您在某些情况下不想记录任何内容,可以将其附加为处理器,但您应该仍然在基本的 Logger 实例中过滤出所有级别,以实现最佳性能。

装饰器

  • ChainHandler - 将单个条目分发到多个处理器。
  • FinalStrawHandler - 将所有日志条目缓存,直到达到一定的严重程度。一旦达到,所有条目将作为一个批次传递给子处理器。

基于流

  • StreamHandler - 将日志记录到任何PHP流。
  • FileHandler - 将日志记录到文件。
  • StderrHandler - 将日志记录到stderr(控制台)。
  • StdOutHandler - 将日志记录到stdout(控制台)。
  • OutputHandler - 将日志记录到PHP的输出缓冲区

其他

  • MemoryHandler - 将日志记录到内存中的队列。

处理器

  • ChainProcessor - 将单个条目分配给多个处理器。
  • MemoryProcessor - 将内存使用情况添加到上下文中。
  • NullProcessor - 不做任何事情。

格式化器

  • CallbackFormatter - 将任何可调用的对象转换为格式化器。
  • JsonFormatter - 格式化为JSON字符串。
  • NullFormatter - 返回null(实际上使日志记录变得不可能)
  • StringFormatter - 使用自定义格式的字符串插值器将条目格式化为字符串。

许可证

版权所有 (C) 2014-2022 Matthew Leverton

特此授予任何获得本软件及其相关文档文件(“软件”)副本的个人免费使用软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许获得软件的个人这样做,前提是符合以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何形式的保证,无论是明示的、暗示的还是法定保证,包括但不限于适销性、特定目的适用性和非侵权性。在任何情况下,作者或版权持有人不对任何索赔、损害或其他责任负责,无论这些责任是因合同、侵权或其他原因引起的,无论这些责任是与软件或其使用或其他方式相关还是由此产生。