如何在本地和测试环境中禁用日志通道

How do I disable a log channel on local and testing environment

在我的应用程序中,我有这些日志通道:

'general'       => [
 'driver' => 'single',
 'path'   => storage_path('logs/general.log'),
 'level'  => 'debug',
],
'jobs'    => [
  'driver'   => 'stack',
  'channels' => [
    'general',
    'slack'
 ],
],
'slack'         => [
    'driver'   => 'slack',
    'url'      => /*Censored Hook URL*/,
    'username' => 'MyApp',
    'emoji'    => ':gear:',
    'level'    => 'debug',
],

当我登录 job 频道时,我不想在本地或测试环境中登录 slack 日志,以避免在共享日志频道上出现重复和极其不需要的日志松弛。

那么我如何指定 slack 通道能够写入日志的环境。一种肮脏的方法是通过以下代码片段手动指定将写入哪些日志:

if(!App::environment(['local','testing')){
   Log::channel('jobs')->info('Blah blah blah');
} else {
   Log::channel('general')->info('Blah blah blah');
}

但是使用上面的代码,恐怕会使我的代码库变得难以阅读。那么你知道一个优雅的解决方案来处理我的日志吗?

您可以简单地将 jobs 拆分为 2 个条目,例如 jobsjobs_without_slack,让 jobs 保持原样,而 jobs_without_slack 将被配置为没有slackchannels。然后使用不同的 .env.xy 文件进行测试(.env.testing)、本地、开发(.env.develop)等,并将 LOG_CHANNEL 设置为正确的日志记录,因此您不需要更改逻辑中的一行代码 ;)