gd-75 / simple-logger
一个简单的PSR-3兼容PHP日志记录器
1.0.0
2021-02-12 23:41 UTC
Requires (Dev)
- phpunit/phpunit: ^9
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!");