2017-02-16 3 views
0

Ich arbeite an einer Multi-Tenant-App, bei der ich viel mehr Daten protokollieren muss, als ich an die Protokollfassade übergebe. Was ich meine ist, dass ich jedes Mal, dies zu tun ...Kontextinformationen protokollieren (ohne sie explizit anzugeben)

Log::info('something happened'); 

ich diese:

[2017.02.15 18.12.55] local.INFO: etwas passiert

Aber ich will diese bekommen:

[2017.02.15 18.12.55] [meine EC2-Instanz-ID] [client_id] local.INFO: etwas passiert

Wie Sie sehen können, protokolliere ich die EC2-Instanz-ID und die Client-ID meiner App. Ich vereinfache das natürlich, da ich dort viel mehr Sachen loggen muss. Wenn ich diese Protokolle aufnehme und aggregiere, sind sie mit diesen zusätzlichen Feldern unglaublich praktisch, um herauszufinden, welche Dinge wo und wo schief gelaufen sind.

Im Zend Framework unterklassiere ich normalerweise den Logger und füge diese zusätzlichen Felder in meine Unterklasse ein, aber ich bin mir nicht sicher, wie ich das mit Laravel machen kann. Ich kann nicht finden, wo der Logger instanziiert ist, damit ich meinen benutzerdefinierten Logger einstecken kann (wenn das in Laravel auch so ist).

Also frage ich nicht, wie man die EC2-Instanz-ID und die anderen Sachen, ich frage nur, was die richtige Art und Weise zu "heißen Draht" der Laravel Logger ist in der Lage sein, dies zu stecken.

Antwort

1

Nur eine Idee ... der Logger in Laravel ist wirklich ein Monolog Beispiel ... Sie einen Handler auf sie drücken könnte und tun, was die Verarbeitung Sie für jeden Eintrag wollen ... wie so ...

<?php 

$logger->pushProcessor(function ($record) { 
    $record['extra']['dummy'] = 'Hello world!'; 

    return $record; 
}); 

Wie beim Laravel-Dokument können Sie beim Booten in die Monolog-Konfiguration einsteigen ...

Benutzerdefinierte Monolog Konfiguration

Wenn Sie die vollständige Kontrolle über haben möchte, wie Monolog ist für Ihre Anwendung konfiguriert, können Sie die Anwendung des configureMonologUsing Methode verwenden. Sie sollten einen Aufruf dieser Methode in der Bootstrap/app.php Datei direkt vor der $ app Variable platzieren durch die Datei zurückgegeben:

$app->configureMonologUsing(function ($monolog) { 
    $monolog->pushHandler(...); 
}); 

return $app; 

Anstatt also drücken Sie einfach einen Prozessor auf den $ Monolog Instanz übergeben an den Haken ...

Nur eine Idee, ich habe dies nicht in Laravel versucht, aber Monolog vor ...

Verwandte Themen