如何解决特定于包的 Laravel 日志文件
我正在编写几个 laravel 包,我想知道是否可以将包写入特定的日志文件,但仅写入与包相关的消息?
我尝试在 packages/myorg/mypackage/config(如下)中创建一个 logging.PHP 文件,但它似乎没有做任何事情。
use Monolog\Handler\NullHandler;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\SyslogUdpHandler;
return [
'default' => env('LOG_CHANNEL','stack'),'channels' => [
'stack' => [
'driver' => 'stack','channels' => ['single'],'ignore_exceptions' => false,],'single' => [
'driver' => 'single','path' => storage_path('logs/mypackage.log'),'level' => env('LOG_LEVEL','debug'),]
]
];
我正在使用“jeroen-g/laravel-packager”来设置包。它似乎在ServiceProvider bootForConsole 中手动加载mypackage.config
protected function bootForConsole(): void
{
// Publishing the configuration file.
$this->publishes([
mypackage.'/../config/mypackage.PHP' => config_path('mypackage.PHP'),'mypackage.config');
}
我不确定如何添加自定义日志记录。我仍在学习 Laravel,我不太确定主要应用程序 config/logging.PHP 是什么或如何读取,所以我不太确定如何为附加包注入自定义版本。
编辑: 我发现一个帖子建议在 ServiceManager boot() 方法中使用以下内容:
$this->app->make('config')->set('logging.channels.mychannel',[
/* settings */
]);
我使用包配置来设置“日志记录”=> [ 'channels' => [ 'mychannel' => [ /* settings */ ] ] ] 然后可以执行与上述相同的操作:>
$this->app->make('config')->set('logging.channels.mychannel',config('mypackage.logging.channels.mychannel');
但这仍然需要代码中的某些内容。到目前为止,我发现的下一个最好的事情是将我的 config/logging.PHP 更改为 config/logging.channels.PHP 并包含以下内容:
return [
'mychannel' => [
'driver' => 'single',]
];
$this->mergeConfigFrom(__DIR__ . '/../config/logging.channels.PHP','logging.channels');
我尝试从原始的 'logging.PHP' 中执行此操作,通道数组嵌套在 'logging' 键中,但 array_merge 似乎没有合并嵌套元素,因此我的频道从未出现在 logging.channels 中。>
不过,我不确定这是否理想。我仍然想知道是否有添加自定义包日志记录参数的“更好”或最佳实践方法,以及是否需要以任何方式(以及如何)发布它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。