Question

Je voudrais ajouter quelques données de tous les enregistrements de journal dans mon application Laravel.

Je pense qu'il serait utile de connaître le nom d'utilisateur de l'utilisateur actuel et/ou l'adresse IP du client.

Actuellement, je suis en ajoutant manuellement en faisant:

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

Mais je voudrais savoir comment faire ajouter un écouteur ou quelque chose à faire tous journal recorde avoir le nom d'utilisateur (si disponible).

Était-ce utile?

La solution

Depuis Laravel sort de la boîte avec Monolog, il est assez simple.Il peut être facilement atteint par l'édition app/start/global.php et ajoutez la ligne suivante après la ligne qui commence par: 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;
});

Fondamentalement, nous sommes à l'aide de la sous-jacentes Monolog exemple pour enregistrer un processeur qui va intercepter tout enregistrement de journal écrit.Les résultats seront similaires, comme les suivants:

[2014-04-12 23:07:35] local.INFO:Pré-payé d'activation.[] {"utilisateur":"anonyme","ip":"::1"}

Plus d'informations sur Monolog processeurs: https://github.com/Seldaek/monolog/blob/master/doc/01-usage.md#using-processors


Extra: La codé en dur extra est-à-dire Monolog pour ajouter des données supplémentaires morceau de l'information (redondant de le dire).Dans la pratique, c'est pour éviter de remplacer les données de contexte ajoutée dans le journal d'origine de l'appel.

Autres conseils

Dans Laravel 5, vous pouvez le faire par la personnalisation de Monolog.D'abord créer une classe qui personnalise Monolog de sorte qu'il ajoute les informations de l'utilisateur pour les enregistrements du journal:

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;
    }
}

Connectez ensuite la classe à la Laravel logger en l'ajoutant à la configuration de canal dans le config/logging.php fichier:

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

Une documentation sur la personnalisation de Monolog

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top