【问题标题】:Laravel: default additional info to all logLaravel:所有日志的默认附加信息
【发布时间】:2019-07-30 20:14:01
【问题描述】:

我想在 Laravel 5.5 中默认将它存储在所有 Log 中:

$additionalInfo = auth()->user() ? 'Online user #'.auth()->user()->id : '';

那么storage/logs/laravel.log 中的条目将如下所示:

[2019-07-30 11:27:22] [Online user #1] local.ERROR: Parse error: syntax error, unexpected '$metaInfo' (T_VARIABLE) {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalThrowableError(code: 0): Parse error: ...

或者这个

[2019-07-30 11:27:22] local.ERROR: [Online user #1] Parse error: syntax error, unexpected '$metaInfo' (T_VARIABLE) {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalThrowableError(code: 0): Parse error: ...

关于如何完成它的任何想法?

我觉得我需要通过创建自定义处理程序来创建custom Monolog configuration,但 Laravel 文档并没有进一步向我们展示如何做到这一点。

【问题讨论】:

  • 是否在错误成为选项之前将其添加到一行中? [2019-07-30 11:27:22] local.INFO: Following error happened to Online user #1 ...[on antoher line]... [2019-07-30 11:27:22] local.ERROR: Parse error: syntax error
  • @ElieMorin 不,谢谢你的想法!
  • 您找到解决方法了吗?因为我认为你必须覆盖 HandleException 门面。
  • @ElieMorin 是的,我已经解决了这个问题,请检查我刚刚添加的答案!覆盖 HandlerException 仅适用于记录异常。我需要它适用于任何Log::info($message) 我也会在我的应用程序中调用。

标签: laravel laravel-5 logging monolog


【解决方案1】:

我认为这不是最好的方法,但是创建一个新的 Log 类以更好地处理我需要的日志记录并将新类注册为 config/app.php 中的 Log 别名解决了我的问题。

新班级app/Log.php

<?php

namespace App;

class Log
{
  /**
     * Handle dynamic, static calls to the object.
     *
     * @param  string  $method
     * @param  array   $args
     * @return mixed
     *
     * @throws \RuntimeException
     */
    public static function __callStatic($method, $args){
      // when it is called --> Log::info('hello world', ['more data' => 'Some additional data']);
      // parameters here will be --> $method = 'info'; $args[0] = 'hello world'; $args[1] = ['more data' => 'Some additional data'];
      $additionalData = isset($args[1]) ? $args[1] : [];
      if(auth()->check()){
        $additionalData['User ID'] = auth()->id();
      }
      return empty($additionalData) ? \Illuminate\Support\Facades\Log::$method($args[0]) : \Illuminate\Support\Facades\Log::$method($args[0], $additionalData);
    }
}

然后在'aliases' 里面config/app.php 我已经改变了这个

'Log' => Illuminate\Support\Facades\Log::class,

到这里

'Log' => App\Log::class,

现在,在我的应用程序中调用的任何抛出的异常或Log::info($message) 都将由app/Log.php 处理,当用户在线时,它会在日志中的主消息之后和内部正确地包含用户 ID。

【讨论】:

    猜你喜欢
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 2018-06-01
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多