使用Laravel禁用生产中的Log :: info

时间:2016-02-11 00:56:45

标签: php laravel laravel-5.1 monolog

我认为默认情况下,Log :: info调用不会登录生产,但它们仍然会进入。

我使用.env文件设置制作

APP_ENV=production
APP_DEBUG=false

我也试过这些命令,但没有运气

composer dump-autoload
php artisan cache:clear
php artisan optimize

我错过了什么吗?

3 个答案:

答案 0 :(得分:2)

嗯,我认为现在搜索所有Log::info()已经太晚了,并且@jon__o做了建议的回答

if (App::environment('local', 'staging')) {
    Log::info($error);
}

但你仍然可以做点什么。您可以使用自己的实现覆盖默认的Laravel记录器实例。

转到ApplicationServiceProvider并使用自定义实例覆盖log实例:

/**
 * Register any application services.
 *
 * @return void
 */
public function register()
{
    $this->registerLogger();
}

/**
 * Register the logger instance in the container.
 *
 * @return MyCustomWriter
 */
protected function registerLogger()
{
    $this->app->instance('log', $log = new MyCustomWriter(
        new Monolog($this->app->environment()), $app['events'])
    );

    $log->dontLogInfoOnEnvironmnets(['production', 'staging', 'other']);
    return $log;
}

现在,您只需扩展Laravel Writer并覆盖info()方法即可创建自定义编写器。

class MyCustomWriter extends \Illuminate\Log\Writer
{

    protected $dontInfoOn = [];

    /**
     * Log an informational message to the logs.
     *
     * @param  string  $message
     * @param  array  $context
     * @return void
     */
    public function info($message, array $context = [])
    {
        // Since we are providing the app environment to the Monolog instance in out ApplicationServiceProvider
        // we can get the environment from the Monolog getName() method
        if(!in_array($this->monolog->getName(), $this->dontInfoOn)) {
            return parent::info($message, $context);
        }
    }

    /**
     * Don't log info() on the supplied environments .
     *
     * @param  array  $environments
     * @return void
     */
    public function dontLogInfoOnEnvironmnets(array $environments)
    {
        $this->dontInfoOn = $environments;
    }
}

这样,您仍然可以在测试环境中保留Log::info,而无需每次都进行检查。

答案 1 :(得分:0)

当您的应用程序未处于调试模式时,仅会禁止显示错误。 Log :: info()函数将在调用时始终记录。

简单的解决方案是让你将Log :: info()函数包装成这样的东西:

if (App::environment('local', 'staging')) {
    Log::info($error);
}

请确保在文件顶部包含应用程序外观use App;。或者,您可以使用app()帮助程序来获取环境:$environment = app()->environment();

答案 2 :(得分:0)

对于仍在发现此线程的人(8年后):

在config / logging.php文件中配置日志通道

将日志通道的“级别”参数设置为.env变量

示例:

  'channels' => [
    'slack' => [
      'driver' => 'slack',
      'url' => env('LOG_SLACK_WEBHOOK_URL'),
      'username' => 'Lumen Log',
      'emoji' => ':boom:',
      'level' => env('LOG_LEVEL', 'error'),
    ]
  ]

现在,您可以在.env文件中为每种环境设置LOG_LEVEL变量