【问题标题】:Laravel: Adding log channels outside logging.php configuration (plugin development)Laravel:在 logging.php 配置之外添加日志通道(插件开发)
【发布时间】:2019-08-21 11:03:22
【问题描述】:

我正在开发一个 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 中是否使用了不同的注册表,或者我需要完全不同的解决方案来实现这一点?

【问题讨论】:

  • 您能告诉我们您遇到的具体问题或错误是什么吗?
  • 没有错误,我只是无法注册新的日志通道。
  • @HTDutchy 我认为不需要Registry::addLogger($partLogger, 'vendor_part-log'); 行。
  • @JinalSomaiya 如果不需要它,它已经可以工作了。 Logger 是一个新实例,它不会神奇地挂接到任何现有的实例。

标签: php laravel logging laravel-5.8 monolog


【解决方案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',
            ],
        ];
    }

【讨论】:

    猜你喜欢
    • 2021-09-03
    • 2018-10-18
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    相关资源
    最近更新 更多