Composer在线学习地址:学习地址
在日常的 php 项目开发中,日志记录是不可或缺的一环。我们通常会选择功能强大且灵活的 monolog 作为日志库。然而,随着项目规模的扩大和业务逻辑的复杂化,monolog 的配置也逐渐成为一个让人头疼的问题。
想象一下这样的场景:
PsrLogMessageProcessor
UidProcessor
WebProcessor
这些痛点使得日志配置从一个辅助功能变成了开发过程中的一个负担,不仅耗费时间,还增加了潜在的错误风险。
正当我为这些繁琐的 Monolog 配置而烦恼,寻求一种更优雅、更集中的管理方式时,我偶然发现了
eonx-com/easy-logging
eonx-com/easy-logging
立即学习“PHP免费学习笔记(深入)”;
使用 Composer 安装
eonx-com/easy-logging
<pre class="brush:php;toolbar:false;">composer require eonx-com/easy-logging
安装完成后,你就可以在项目中使用它提供的强大功能了。
eonx-com/easy-logging
HandlerConfigProviderInterface
ProcessorConfigProviderInterface
priority
接下来,我们通过一些代码示例,看看
eonx-com/easy-logging
首先,你需要一个
LoggerFactoryInterface
LoggerFactory
<pre class="brush:php;toolbar:false;">use EonX\EasyLogging\Factory\LoggerFactory;
use Psr\Log\LoggerInterface;
// 假设我们已经通过某种方式(例如DI容器)获取了 LoggerFactory实例
/** @var \EonX\EasyLogging\Factory\LoggerFactoryInterface $loggerFactory */
$loggerFactory = new LoggerFactory(); // 在实际应用中,通常通过DI获取
// 创建默认渠道的 Logger
$defaultLogger = $loggerFactory->create();
$defaultLogger->info('这是一条默认日志');
// 创建特定渠道的 Logger
$consoleLogger = $loggerFactory->create('console');
$consoleLogger->debug('这是一条控制台调试日志', ['command' => 'my:command']);eonx-com/easy-logging
HandlerConfigProviderInterface
<pre class="brush:php;toolbar:false;">// src/Logger/StreamHandlerConfigProvider.php
namespace App\Logger;
use EonX\EasyLogging\Config\HandlerConfig;
use EonX\EasyLogging\Provider\HandlerConfigProviderInterface;
use Monolog\Handler\StreamHandler;
final class StreamHandlerConfigProvider implements HandlerConfigProviderInterface
{
/**
* @return iterable<\EonX\EasyLogging\Config\HandlerConfigInterface>
*/
public function handlers(): iterable
{
// 为所有渠道添加一个将日志写入 php://stdout 的 StreamHandler
yield new HandlerConfig(new StreamHandler('php://stdout'));
// 也可以为特定渠道添加 Handler
yield new HandlerConfig(
new StreamHandler(__DIR__ . '/../../var/log/app.log'),
['app'], // 只应用于 'app' 渠道
100 // 优先级,数字越大越晚执行
);
yield new HandlerConfig(
new StreamHandler(__DIR__ . '/../../var/log/error.log', \Monolog\Logger::ERROR),
null, // 适用于所有渠道
200 // 优先级更高,确保错误日志先被处理
);
}
}然后,你需要将这些提供者注册到
LoggerFactory
<pre class="brush:php;toolbar:false;">use EonX\EasyLogging\Factory\LoggerFactory;
use App\Logger\StreamHandlerConfigProvider;
$loggerFactory = new LoggerFactory();
$loggerFactory->setHandlerConfigProviders([
new StreamHandlerConfigProvider(),
// ... 其他 HandlerConfigProvider
]);
$logger = $loggerFactory->create('app');
$logger->info('这条日志会写入 stdout 和 app.log');
$logger->error('这条错误日志会写入 stdout, app.log 和 error.log');与 Handlers 类似,Processors 通过
ProcessorConfigProviderInterface
<pre class="brush:php;toolbar:false;">// src/Logger/TagProcessorConfigProvider.php
namespace App\Logger;
use EonX\EasyLogging\Config\ProcessorConfig;
use EonX\EasyLogging\Provider\ProcessorConfigProviderInterface;
use Monolog\Processor\TagProcessor;
use Monolog\Processor\UidProcessor;
final class TagProcessorConfigProvider implements ProcessorConfigProviderInterface
{
/**
* @return iterable<\EonX\EasyLogging\Config\ProcessorConfigInterface>
*/
public function processors(): iterable
{
// 为所有渠道添加一个 UID 处理器
yield new ProcessorConfig(new UidProcessor());
// 为 'console' 渠道添加一个 Tag 处理器
yield new ProcessorConfig(
new TagProcessor(['cli', 'background']),
['console'],
100 // 优先级
);
}
}同样,注册到
LoggerFactory
<pre class="brush:php;toolbar:false;">use EonX\EasyLogging\Factory\LoggerFactory;
use App\Logger\TagProcessorConfigProvider;
use App\Logger\StreamHandlerConfigProvider; // 假设也注册了 Handler
$loggerFactory = new LoggerFactory();
$loggerFactory->setHandlerConfigProviders([new StreamHandlerConfigProvider()]);
$loggerFactory->setProcessorConfigProviders([
new TagProcessorConfigProvider(),
// ... 其他 ProcessorConfigProvider
]);
$consoleLogger = $loggerFactory->create('console');
$consoleLogger->info('这条控制台日志会带上 UID 和 cli/background 标签');Monolog 的
Logger
useMicrosecondTimestamps()
eonx-com/easy-logging
LoggerConfiguratorInterface
<pre class="brush:php;toolbar:false;">// src/Logger/UseMicrosecondsLoggerConfigurator.php
namespace App\Logger;
use EonX\EasyLogging\Config\AbstractLoggingConfig;
use EonX\EasyLogging\Configurator\LoggerConfiguratorInterface;
use Monolog\Logger;
final class UseMicrosecondsLoggerConfigurator extends AbstractLoggingConfig implements LoggerConfiguratorInterface
{
public function configure(Logger $logger) : void
{
// 启用微秒时间戳
$logger->useMicrosecondTimestamps(true);
}
}注册到
LoggerFactory
<pre class="brush:php;toolbar:false;">use EonX\EasyLogging\Factory\LoggerFactory;
use App\Logger\UseMicrosecondsLoggerConfigurator;
$loggerFactory = new LoggerFactory();
$loggerFactory->setLoggerConfigurators([
new UseMicrosecondsLoggerConfigurator(),
// ... 其他 LoggerConfigurator
]);
$logger = $loggerFactory->create();
$logger->info('这条日志的时间戳将包含微秒');eonx-com/easy-logging
实际应用效果显著:
new Logger(...)
->pushHandler(...)
如果你也曾被 Monolog 的繁琐配置所困扰,强烈推荐你尝试
eonx-com/easy-logging
以上就是PHP日志配置太复杂?eonx-com/easy-logging助你轻松管理Monolog的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号