Lavel의 모든 로그 레코드에 데이터를 추가하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com//questions/23037393

  •  21-12-2019
  •  | 
  •  

문제

LARAVEL 응용 프로그램 내의 모든 로그 레코드에 데이터를 추가하고 싶습니다.

현재 사용자 및 / 또는 클라이언트 IP 주소의 사용자 이름을 알고 도움이 될 것이라고 생각합니다.

현재 다음을 수행하여 수동으로 추가하고 있습니다.

Log::info('Pre-paid activation.', array('username' => Auth::user()->username));
.

그러나 log recorde에 을 만드는 방법을 알고 싶습니다.

도움이 되었습니까?

해결책

"noreferrer"> 독백 가있는 상자에서 벗어 났으므로 꽤 똑바로 앞으로 나아갑니다. app/start/global.php를 편집하여 쉽게 수행 할 수 있으며 다음과 같이 시작된 행 뒤에 다음을 추가 할 수 있습니다. Log::useFiles :

Log::useFiles(storage_path().'/logs/laravel.log');
$monolog = Log::getMonolog();
$monolog->pushProcessor(function ($record) {
    $record['extra']['user'] = Auth::user() ? Auth::user()->username : 'anonymous';
    $record['extra']['ip'] = Request::getClientIp();
    return $record;
});
.

기본적으로 기본 모음 인스턴스를 사용하여 기록 할 로그 레코드를 가로 챌 수있는 프로세서를 등록하고 있습니다. 결과는 다음과 같습니다.

[2014-04-12 23:07:35] local.info : 선불 활성화. [] { "사용자": "익명", "IP": ": 1"}

더 많은 정보 모음 프로세서에 대한 자세한 정보 : https : //github.com/seldaek/monolog/blob/master/doc/01-usage.md#using-processors


엑스트라 : 하드 코딩 된 extra는 독백을 추가 정보 (중복 할 수있는 것)로 데이터를 추가 할 수있는 것입니다. 실천에서 이것은 원래 로그 호출에 추가 된 컨텍스트 데이터를 무시하는 것을 피하기위한 것입니다.

다른 팁

LARAVLE 5의

단일 로클을 사용자 정의하여 할 수 있습니다.먼저 독백을 사용자 정의하여 사용자 정보를 로그 레코드에 추가하는 클래스를 만듭니다.

namespace App\Logging;

use App\Models\User;
use Illuminate\Foundation\Application;
use Illuminate\Http\Request;
use Illuminate\Log\Logger;

class AddUserInformation
{
    protected $request;

    public function __construct(Request $request = null)
    {
        $this->request = $request;
    }

    public function __invoke(Logger $logger)
    {
        if ($this->request) {
            foreach ($logger->getHandlers() as $handler) {
                $handler->pushProcessor([$this, 'processLogRecord']);
            }
        }
    }

    public function processLogRecord(array $record): array
    {
        $record['extra'] += [
            'user' => $this->request->user()->username ?? 'guest',
            'ip' => $this->request->getClientIp()
        ];

        return $record;
    }
}
. 그런 다음 config/logging.php 파일의 채널 설정에 클래스를 Lavel 로고에 연결하여 클래스를 연결하십시오.

// ...
'channels' => [
    'single' => [
        'driver' => 'single',
        'tap' => [\App\Logging\AddUserInformation::class],
        'path' => storage_path('logs/laravel.log'),
        'level' => env('LOG_LEVEL', 'debug'),
    ],
    // ...
]
.

독백 사용자 정의에 대한 문서

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top