shikachuu / jogger
0.2.5
2020-11-10 00:00 UTC
Requires (Dev)
- mikey179/vfsstream: 1.6.*
- phpunit/phpunit: 9.*
- squizlabs/php_codesniffer: 3.*
- vimeo/psalm: ^4.4
Provides
- psr/log-implementation: 1.0.0
README
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...)和非原始类型(目前只有数组)作为额外的字段,这些字段与几乎标准的 message
和 timestamp
字段相邻。这些字段也是链式的(它们具有流畅的返回值)。
<?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 文件的插件部分。