oasis/logging

monolog/monolog 的包装器。应该比 monolog 更容易使用/配置

v1.5.1 2023-05-24 07:19 UTC

README

oasis/logging 提供用于写入日志的类和函数。

该组件可以简称为 MLogMLogger

默认提供了一系列日志处理器

  • 控制台处理器
  • 本地文件处理器
  • 本地错误处理器
  • AWS SNS 处理器

MLog 严格遵守 PSR-3 标准,并使用 monolog/monolog 作为其底层实现。

安装

使用以下命令安装最新版本

$ composer require oasis/logging

基本用法

MLogger 可以不进行任何配置即可使用

<?php

// quick logging methods as global functions
mdebug("This is a debug message");
minfo("This is a info-level log message");
mnotice("Notice is also available");
mwarning("WARNING: something is possibly wrong!");
merror("ERROR: something is definitely wrong!");
mcritical("This is CRITICAL!");
malert("ALERT! ALERT!");
memergency("URGENT!");

// sprintf compatible logging
$name = 'test';
mdebug("The object %s is being processed", $name);

直接使用 Logger

Monolog\Logger 可以直接使用。这提供了将 MLog 与其他需要日志工具的 PSR-3 兼容组件集成的自由。

<?php

use Monolog\Logger as MonoLogger;
use Oasis\Mlib\Logging\MLogging;

/** @var MonoLogger $logger */
$logger = MLogging::getLogger();

// the $logger object can then be injected into any place in need of a MonoLogger

添加处理器

多亏了 monolog/monolog 的成熟社区,MLog 可以利用所有现有的 monolog 处理器。

此外,您还可以编写自己的处理器,该处理器实现了 Monolog\Handler\HandlerInterface 接口。

向 MLog 添加处理器非常简单

<?php

use Oasis\Mlib\Logging\ConsoleHandler;
use Oasis\Mlib\Logging\LocalFileHandler;
use Oasis\Mlib\Logging\MLogging;

MLogging::addHandler(new ConsoleHandler());

// or

(new LocalFileHandler())->install();

使用自动轮换时间戳的文件处理器

Oasis\Mlib\Logging\LocalFileHandler 可以轻松配置,根据时间变化轮换其文件名。如果您是一个运行时间超过几秒钟的长脚本,这将非常有用。只要提供正确的名称模式,本地文件名就会在预设间隔过去时旋转。以下是一个示例

<?php
use Oasis\Mlib\Logging\LocalFileHandler;

$lfh = new LocalFileHandler('/my-log-path', '%date%/%hour%-%minute%-%script%.log');

// This tells the filename to rotate every 30 minutes
$lfh->setRefreshRate(1800);

支持的名字模式如下

| 模式 | 含义 | |:--- |: ---| %date% | 替换为当前日期,格式为:yyyymmdd %hour% | 替换为当前小时,格式为:HH (00-23) %minute% | 替换为当前分钟,格式为:ii (00-59) %second% | 替换为当前秒,格式为:ss (00-59) %script% | 替换为当前脚本的名称,仅文件名,不带目录名 %pid% | 替换为当前进程 ID

使用 AWS SNS 自动处理警报

Oasis\Mlib\Logging\AwsSnsHandler 提供了一个处理器,仅当日志级别高于一定级别(默认为 ALERT)时才会处理。

在生产环境中,这是一个非常有用的工具。它缓冲所有日志,如果脚本在没有错误的情况下退出,则丢弃它们。如果出现致命错误等异常情况导致脚本退出,处理器会将所有缓冲日志以及一个 ALERT 日志发布到指定的 AWS SNS 主题。

AwsSnsHandler 是一个可选功能,它依赖于 oasis/aws-wrappers 组件

$ composer require oasis/aws-wrappers

要使用 AwsSnsHandler,请尝试以下代码

<?php

use Oasis\Mlib\Logging\AwsSnsHandler;
use Oasis\Mlib\AwsWrappers\SnsPublisher;

/** @var string $the_topic_arn      the topic's AWS Resource Name */
/** @var array $some_aws_config     config data to initialize an Sns Publisher */
$publisher = new SnsPublisher($some_aws_config, $the_topic_arn);

$snsHandler = new AwsSnsHandler($publisher, 'This is the subject');
$snsHandler->enableAutoPublishingOnFatalError();
$snsHandler->install();