【问题标题】:create a new laravel logging channel through ServiceProvider通过 ServiceProvider 创建一个新的 laravel 日志通道
【发布时间】:2020-01-18 00:41:58
【问题描述】:

我正在创建一个 Laravel 包。是否可以通过 ServiceProvider 类创建新的日志通道?

我已经在我的config/logging.php 中手动创建了一个新的日志记录通道,但是我希望该软件包将来可以为我自动执行此操作。

更新: 我有一个 Laravel 包,其中将使用它自己的日志堆栈和文件。这是我现在在config/logging.php 中的代码:

'deployment' => [
    'driver' => 'single',
    'path' => storage_path('logs/deployment.log'),
    'level' => 'debug',
],

谢谢。

【问题讨论】:

  • 当您说记录通道时,您是指单独的日志文件吗?或者你的意思是像infodebug
  • @thisiskelvin:是的。在config/logging.php 中,您可以定义将输出到不同文件的新通道(如果这是所需的操作)。

标签: laravel logging


【解决方案1】:

你可以使用

$this->app->make('config')->set('logging.channels.deployment', [
    'driver' => 'single',
    'path' => storage_path('logs/deployment.log'),
    'level' => 'debug',
]);

在您的 ServiceProvider::boot 方法中

【讨论】:

    【解决方案2】:

    您可以使用 app('log') 从服务容器中获取 LogManager 单例,并使用 public function stack(array $channels, $channel=null) 方法传入要添加的通道数组。

    app('log')->stack([
        'channels' => [
            'test' => [
                'driver' => 'daily',
                'path' => storage_path('logs/test.log'),
                'level' => 'debug',
                'days' => 30,
            ]
        ]
    ]);
    

    【讨论】:

    • 这不能回答问题。我已经config/logging.php 文件中添加了我的日志配置。我希望以编程方式执行此操作。
    • 更新了答案以解决在运行时添加额外的记录器配置。我不确定您为什么要在运行时添加配置……或者您如何知道在创建日志时要使用哪个通道。如果您分享您尝试做的事情背后的原因,您的问题可能会有不同的解决方案。
    • 我已经更新了我的问题。您的答案似乎可行,但是我尚未对其进行测试。感谢您提供答案。
    • 好的。实际上听起来您只是希望用户能够安装您自己的预定义配置。这是通过出版完成的。更多信息(配置示例):laravel.com/docs/5.7/packages#publishing-file-groups
    • @zyglobe 您引用的文档没有回答问题,因为自定义包发布自己的文件不会在现有配置文件中添加新条目,即config/logging.php
    猜你喜欢
    • 2018-10-18
    • 2019-01-13
    • 2020-05-01
    • 2015-04-24
    • 1970-01-01
    • 2019-04-21
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多