yubb / loggy
简单的、轻量级的以 JSON 格式输出到 stdout 的日志记录器
This package is auto-updated.
Last update: 2024-08-30 01:39:47 UTC
README
Loggy 是一个简单的、轻量级的 PHP 日志记录器,设计用于以 JSON 格式记录到 stdout 或文件。
此包的动机是在整个 Web 堆栈的所有应用程序中有一个一致的日志格式,以 JSON 输出,以便可以轻松地由日志转发器消费,并以最少的处理推送到 ELK 堆栈。
Loggy 可以通过日志对象或使用静态方法使用,以简化在您的应用程序中的使用。
静态方法使用 Singleton 模式以防止冗余。
安装
您可以通过 composer 在您的应用程序中安装 Loggy
#!bash
composer require yubb/loggy
用法
- Loggy 实现
Psr\Log\LoggerInterface
。 - Loggy 可以配置为将日志写入 stdout(默认行为)或写入文件。
- 如果写入文件,loggy 可以在每日、每周或每月的基础上轮换日志文件。
- Loggy 有不同的日志格式,JSON(默认)、格式化 JSON 或行。
- JSON:日志格式化为 JSON 对象。
- 格式化 JSON:日志格式化为 JSON 对象,将时间戳转换为人类友好的格式(ISO-8601,仍然与 ELK 堆栈兼容)。
- 行:日志格式化为行。(更适合开发环境。)
日志结构
字段 | 类型 | 注意 |
---|---|---|
timestamp | UNIX 秒纪元 | UNIX 秒纪元,不受时区影响 |
channel | 字符串 | 日志记录器的通道 |
level | 字符串 | |
level_value | 整数 | |
message | 字符串 | |
context | JSON 对象 | |
backtrace | JSON 对象 | 这包含写入日志时的 line 、function 、class 和 file 。 |
配置
这是日志记录器构造函数或静态 Loggy 的配置参数。
参数 | 类型 | 注意 | 默认值 |
---|---|---|---|
$channel | 字符串 | 日志记录器的通道 | |
$min_log_level | 整数 或 Loggy 的级别常量 | 记录日志的最小级别 | Loggy::DEBUG |
$format | 整数 或 Loggy 的格式常量 | 日志的格式 | Loggy::JSON |
$stream | 字符串 或 Loggy 的 stdout/stderr 常量 | 将日志写入的流,可以是文件路径或 stdout/stderr | Loggy::STDOUT |
$rotation | 日期格式 或 Loggy 的轮换常量 | 将添加按给定格式格式化的日期(仅当 $stream 是文件路径时相关) | Loggy::FILE_NO_ROTATE |
其他日志轮换常量
Loggy::FILE_NO_ROTATE = ''
Loggy::FILE_PER_DAY = 'Y-m-d'
Loggy::FILE_PER_WEEK = 'Y-W'
Loggy::FILE_PER_MONTH = 'Y-m'
基本用法(使用静态方法)
在您应用程序的入口点,您应该设置 loggy。
#!php
<?php
Loggy::setLogger('my-app');
从那里,请求中的任何调用都只会使用此 loggy 实例,并将显示具有给定通道的日志。
#!php
<?php
Loggy::info_s('TEST DEBUG', ['foo' => 'bar', 'fizz' => 'buzz']);
这将生成类似以下的日志到 stdout
#!json
{
"timestamp": "1549908364",
"channel": "my-app",
"level": "DEBUG",
"level_value": 100,
"message": "TEST DEBUG",
"context": {
"foo": "bar",
"fizz": "buzz"
},
"backtrace": {
"line": 30,
"function": "DoTheThing",
"class": "MyApp\\MyAppClass",
"file": "/myappdirectory/MyAppClass.php"
}
}
(注意:日志将只有一行,并且不如上面的格式漂亮)
最小日志级别
设置 loggy 时,您可以定义最小日志级别如下
#!php
<?php
Loggy::setLogger('my-app', Loggy::INFO);
格式化输出
设置 loggy 时,您可以将其设置为以 '格式化' 格式记录日志,这将以更人类化的格式打印日志,而不是 JSON。这通常适用于开发环境。
PRETTY_JSON
#!php
<?php
Loggy::setLogger('my-app', Loggy::INFO, Loggy::PRETTY_JSON);
格式化 JSON 与 JSON
相同,只是它将时间戳转换为人类可读的日期,而不是 UNIX 纪元。
LINE
#!php
<?php
Loggy::setLogger('my-app', Loggy::INFO, Loggy::LINE);
日志将被发送到 stdout,并看起来像
2019-01-23 14:06:12.816700 [INFO] <my-app> TEST INFO {"foo":"bar","fizz":"buzz"} (in /myappdirectory/MyAppClass.php, MyApp\\MyAppClass:DoTheThing, line 30)