Laravel: 在 logging.php 配置之外添加日志通道(插件开发)
Laravel: Adding log channels outside logging.php configuration (plugin development)
我正在研究 laravel plugin/package。
我们想在主项目配置之外定义我们自己的记录器 (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 中是否使用了不同的注册表,或者我是否需要完全不同的解决方案来实现这一点?
虽然我们仍然想要一个更自动化的解决方案,但我们已经妥协并使用静态函数作为配置源。
在config/logging.php
中:
将顶部的 return [...
替换为 $config = [...
。
并在底部添加以下行:
$config['channels'] = array_merge(
$config['channels'],
\FooVendor\Bar\Classes\Logs::getLogs(),
);
return $config;
并使用以下函数创建提到的 class:
/**
* 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',
],
];
}
我正在研究 laravel plugin/package。
我们想在主项目配置之外定义我们自己的记录器 (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 中是否使用了不同的注册表,或者我是否需要完全不同的解决方案来实现这一点?
虽然我们仍然想要一个更自动化的解决方案,但我们已经妥协并使用静态函数作为配置源。
在config/logging.php
中:
将顶部的 return [...
替换为 $config = [...
。
并在底部添加以下行:
$config['channels'] = array_merge(
$config['channels'],
\FooVendor\Bar\Classes\Logs::getLogs(),
);
return $config;
并使用以下函数创建提到的 class:
/**
* 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',
],
];
}