特定于包的 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',]
];

然后在服务提供者 register() 方法添加

    $this->mergeConfigFrom(__DIR__ . '/../config/logging.channels.PHP','logging.channels');

我尝试从原始的 'logging.PHP' 中执行此操作,通道数组嵌套在 'logging' 键中,但 array_merge 似乎没有合并嵌套元素,因此我的频道从未出现在 logging.channels 中。>

不过,我不确定这是否理想。我仍然想知道是否有添加自定义包日志记录参数的“更好”或最佳实践方法,以及是否需要以任何方式(以及如何)发布它。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...