yubb/loggy

简单的、轻量级的以 JSON 格式输出到 stdout 的日志记录器

维护者

详细信息

bitbucket.org/yubb/loggy

主页

源代码

安装: 18,836

依赖项: 2

建议者: 0

安全性: 0

2.1.2 2021-11-01 19:14 UTC

This package is auto-updated.

Last update: 2024-08-30 01:39:47 UTC


README

Codacy Badge

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 堆栈兼容)。
    • 行:日志格式化为行。(更适合开发环境。)

日志结构

字段类型注意
timestampUNIX 秒纪元UNIX 秒纪元,不受时区影响
channel字符串日志记录器的通道
level字符串
level_value整数
message字符串
contextJSON 对象
backtraceJSON 对象这包含写入日志时的 linefunctionclassfile

配置

这是日志记录器构造函数或静态 Loggy 的配置参数。

参数类型注意默认值
$channel字符串日志记录器的通道
$min_log_level整数Loggy 的级别常量记录日志的最小级别Loggy::DEBUG
$format整数Loggy 的格式常量日志的格式Loggy::JSON
$stream字符串Loggy 的 stdout/stderr 常量将日志写入的流,可以是文件路径或 stdout/stderrLoggy::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)