特定于包的 Laravel 日志文件

如何解决特定于包的 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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?