我正在研究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内部是否使用了其他注册表?或者我需要一个完全不同的解决方案来实现这一目标?
答案 0 :(得分: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',
],
];
}