shikachuu/jogger

此包已被放弃且不再维护。作者建议使用 shikachuu/picolog 包。

PSR-3 兼容的 PHP 日志库,主要基于 Go 项目 rs/zerolog。

0.2.5 2020-11-10 00:00 UTC

This package is not auto-updated.

Last update: 2021-10-30 07:29:43 UTC


README

Codecov GitHub Packagist Version

PSR-3 兼容,具有意见的 PHP 日志库,主要基于 Go 项目 rs/zerolog 和 PHP 项目 Seldaek/monolog

构建此库的原因是因为我感到 json 日志字符串的插值不能提供足够的灵活性,而且比额外的字段更难以过滤。由于 json 语法提供了这些功能,我们应该充分利用它们。

安装

composer require shikachuu/jogger

功能和示例

时间格式

Jogger 支持 2 种日期格式

  • ISO8601 $logger->setTimeFormatISO8601();
  • Unix 时间戳 $logger->setTimeFormatUnix();

额外的链式字段

Jogger 与 zerolog 一样,支持多种原始类型(int、float...)和非原始类型(目前只有数组)作为额外的字段,这些字段与几乎标准的 messagetimestamp 字段相邻。这些字段也是链式的(它们具有流畅的返回值)。

<?php
declare(strict_types=1);

use Jogger\Logger;
use Jogger\Output\StdoutOutput;

require_once "vendor/autoload.php";

$logger = new Logger("default", [new StdoutOutput("info")], "Europe/Budapest");
$logger->setTimeFormatISO8601();
$logger->addString("name", "John")
    ->addFloat("favoriteNumber", 1.33)
    ->addArray("favoritePokemons", ["Lucario", "Terrakion", "Darkrai"])
    ->alert("New user created for role {role}", ["role" => "admin"]);

^ 上述代码的日志消息大致如下所示

{"timestamp":"2020-10-28T21:13:40.909549+01:00","level":"alert","message":"New user created for role admin","name":"John","favoriteNumber":1.33,"favoritePokemons":["Lucario","Terrakion","Darkrai"]}

异常

Zerolog 能够将 Golang 错误添加到日志消息中。由于在 PHP 中我们主要使用异常,因此 Jogger 能够添加任何继承自 PHP 默认 \Exception 类的异常。

<?php
declare(strict_types=1);

use Jogger\Logger;
use Jogger\Output\StdoutOutput;

require_once "vendor/autoload.php";

$logger = new Logger("default", [new StdoutOutput("error")], "Europe/Budapest");
$logger->setTimeFormatUnix();

try {
    throw new DomainException("Oh something went wrong", 2034);
} catch (DomainException $exception) {
    $logger->addException("domainError", $exception)->error("Failed to serve client");
    // do the error handling
}

^ 上述代码的日志消息大致如下所示

{"timestamp":1603916386,"level":"error","message":"Failed to serve client","domainError":{"exception":"DomainException","code":2034,"message":"Oh something went wrong","file":"\/usr\/src\/myapp\/index.php","line":13,"trace":"#0 {main}"}}

输出插件

此时我假设你已经注意到了第 9 行附近的模式,有一个包含输出的数组。Jogger 支持用户制作的输出插件。事实上,它默认包含 4 个插件

  • NOOP 用于 'no operation',用于测试或模拟。
  • Stream 用于文件和任何 PHP 流。
  • STDOUT 用于利用 PHP 的 stdout 流。它基于 Stream 输出。
  • STDERR 用于利用 PHP 的 stderr 流。它基于 Stream 输出。

在构造函数的数组中,你可以提供日志级别,因此你可以为不同的级别使用不同的输出。

核心库 shikachuu/jogger 目前 不接受 更多输出的 Pull Requests,但它提供了一个 接口 和一个 抽象基类 来编写自己的解决方案,并且你非常欢迎打开 Pull Request 以将你的存储库链接到 README 文件的插件部分。