gd-75/simple-logger

一个简单的PSR-3兼容PHP日志记录器

1.0.0 2021-02-12 23:41 UTC

This package is auto-updated.

Last update: 2024-09-23 14:54:54 UTC


README

简单的PSR-3兼容日志记录器;少于200行代码和4个文件。

仅有一个依赖项,psr/log,您可以放心使用此包。

这最初是我为自己项目开发的库,但我想这可能值得分享。如果您有任何评论或发现错误,请随时打开一个问题。

测试将在以后进行。

功能

全局最小日志级别

定义一个全局最小日志级别,在从开发(DEBUG)模式切换到开发(INFO或甚至NOTICE)模式时很有用。

具有个别最小级别的自定义写入器

默认写入器将写入本地日志文件,但如果您需要其他内容,可以自由地创建一个自定义写入器,实现SimpleLoggerWriterInterface中的一个方法,将其传递给日志记录器,然后您就可以开始了。作为额外的奖励,您可以定义每个写入器的更高最小级别。例如:所有日志都写入日志文件,而只有关键的日志通过您的自定义写入器。

日志代理

当需要在日志消息前添加前缀时很有用,例如在服务类或控制器内部。而不是日志消息为

[INFO] Blah

它变为

[INFO][上下文] Blah

这是通过使用一个轻量级包装类来完成的,该类引用单个全局SimpleLogger实例,这意味着您可以节省

  • 时间:不要为每个类手动添加日志消息的前缀
  • 资源:只有一个“重量级”的日志记录器实例及其写入器,代理是,嗯,代理

安装

composer require gd-75/simple-logger

用法

一些日常用例,如果您认为缺少某个用例并应该添加,请随时打开一个问题 :)

基本用法

<?php
use GD75\SimpleLogger\SimpleLogger;

require_once "vendor/autoload.php";

$logger = new SimpleLogger(SimpleLogger::LEVEL_INFO);

// Minimal log level at logger-level
$logger->debug("I should not be here");
$logger->info("I should be here");

// Non-valid log level (it will always be logged, no matter the minimal log level)
$logger->log("test", "My level was originally a string saying 'test', which is not a known log level");

// Context
$logger->info("I have a context, check it out", ["message" => "Thanks for checking me out!"]);

默认写入器(文件)带有自定义路径

<?php
use GD75\SimpleLogger\SimpleLogger;
use GD75\SimpleLogger\FileWriter;

require_once "vendor/autoload.php";

$logger = new SimpleLogger(SimpleLogger::LEVEL_INFO, false);
// Notice that since the minimal level of the logger is INFO, using a lower level here will have no influence
$logger->addWriter(SimpleLogger::LEVEL_DEBUG, new FileWriter("out", "out/contexts"));

$logger->info("It works!");

代理

<?php
use GD75\SimpleLogger\SimpleLogger;

require_once "vendor/autoload.php";

$logger = new SimpleLogger(SimpleLogger::LEVEL_INFO);

// Using proxy and proxy of a proxy
$loggerProxy = $logger->getProxy("[MyContext]");
$loggerProxy2 = $loggerProxy->getProxy("[MySubContext]");
$loggerProxy->info("I have gone through a proxy!");
$loggerProxy2->info("This is starting to get out of hands");

非默认写入器

<?php
use GD75\SimpleLogger\SimpleLogger;
use GD75\SimpleLogger\SimpleLoggerWriterInterface;

require_once "vendor/autoload.php";

class CLIWriterSimple implements SimpleLoggerWriterInterface {

    public function write(string $levelName, string $message, array $context): void
    {
        $contextElementCount = count($context);
        echo "[{$levelName}] {$message}. Context has {$contextElementCount} element(s) in it.\n";
    }
}

$logger = new SimpleLogger(SimpleLogger::LEVEL_INFO, false);

// Using a writer with a higher minimal level
$logger->addWriter(SimpleLogger::LEVEL_CRITICAL, new CLIWriterSimple());
$logger->critical("This will be seen in the command line");

// Proxies will of course also work with custom writers
$loggerProxy = $logger->getProxy("[MyContext]");
$loggerProxy->critical("I have gone through a proxy!");