Laravel:在logging.php配置之外添加日志通道(插件开发)

问题描述 投票:1回答:1

我正在研究laravel插件/软件包。我们想在主要项目配置(config/logger.php

之外定义自己的记录器

我已经在ServiceProvider register()函数中尝试了以下操作。

基于MonoLogger测试代码。

$partLogger = new Logger('vendor_part-log');
$partLogHandler = new StreamHandler(storage_path('logs/vendor/part-log.log', Logger::DEBUG));
$partLogger->pushHandler($partLogHandler);
// MonoLog Registry
Registry::addLogger($partLogger, 'vendor_part-log');

可悲的是,这在Laravel内部不起作用。我也无法从Registry::

获得其他现有的记录器

所以问题是新频道将无法注册。

Laravel内部是否使用了其他注册表,或者我需要一个完全不同的解决方案来实现此目的?

php laravel logging laravel-5.8 monolog
1个回答
1
投票

虽然我们仍然希望有一个更加自动化的解决方案,但我们已经妥协并且使用静态函数作为配置的来源。

config/logging.php中:

在顶部,将return [...替换为$config = [...

并在底部添加以下行:

$config['channels'] = array_merge(
    $config['channels'],
    \FooVendor\Bar\Classes\Logs::getLogs(),
);

return $config;

并使用以下功能创建所提到的类:

    /**
     * Configs to be merged in config/logging.php
     * @return array
     */
    public static function getLogs()
    {
        return [
            'foo_partlogger' => [
                'driver' => 'single',
                'path' => storage_path('logs/foo/partlogger.log'),
                'level' => 'debug',
            ],
            'foo_second_partlogger' => [
                'driver' => 'single',
                'path' => storage_path('logs/foo/second_partlogger.log'),
                'level' => 'debug',
            ],
        ];
    }
© www.soinside.com 2019 - 2024. All rights reserved.