質問

私のLaravelアプリケーション内のすべてのログレコードにデータを追加したいのですが。

現在のユーザーおよび/またはクライアントのIPアドレスのユーザー名を知っておくと思います。

現在は、次のように手動で追加しています。

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

しかし、 all log Recordeには、リスナーや何かを追加する方法を知りたいです(利用可能な場合)。

役に立ちましたか?

解決

monolog で箱から出てくるので、それはかなり前方です。 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:プリペイドのアクティベーション。 [] {"user": "anonymous"、 "ip": ":: 1"}

モノログプロセッサに関する詳細情報:

他のヒント

Laravel 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ファイルのチャネル設定に追加して、クラスをLaravelロガーに接続します。

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

Monologのカスタマイズに関するドキュメント

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top