Ich habe einen Konsolenskript, das permanent als Worker läuft und Nachrichten von einer Message Queue verarbeitet. Bei einem Fehler bleibt der Worker nicht stehen, sondern loggt den Fehler.
Meine monolog.yaml sieht so aus:
Code:
monolog:
handlers:
main:
type: fingers_crossed
action_level: error
handler: nested
excluded_404s:
# regex: exclude all 404 errors from the logs
- ^/
nested:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"
Ich möchte also mittels "fingers_crossed" nur dann Nachrichten (von jedem Level) in die Datei schreiben, wenn eine Nachricht mit dem Level "error" aufgetreten ist.
In einem ständig laufenden Prozess scheint fingers_crossed aber nicht mehr zurück gesetzt zu werden. Ich habe folgendes Verhalten:
- Bis der erste Fehler aufritt, wird nichts in die Datei geschrieben (soweit richtig)
- Wenn der erste Fehler auftritt, werden sämtliche Nachrichten aller Levels, die bis dahin aufgetreten sind in die Datei geschrieben (falsch, es sollten nur die Nachrichten, die zu dem Fehler gehören geschrieben werden, nicht die, die bei den vorherigen korrekt verarbeiteten Messages auftraten)
- Ab dem ersten Fehler wird jede Nachricht mit jedem Level sofort in die Datei geschrieben (falsch, es sollten erst ab dem nächsten Fehler wieder Nachrichten in die Datei geschrieben werden).
In den Optionen von fingers_crossed finde ich nichts, was mir helfen könnte: https://github.com/symfony/monolog-b...ration.php#L89
Ich glaube, mein grundlegendes Problem ist, dass ich nicht Request-Response habe, sondern einen ständig laufenden Prozess. Dafür scheint Fingers Crossed nicht geeignet zu sein.
Das ist nicht ganz so schlimm, ich kann auch auf Fingers Crossed verzichten und nur Nachrichten mit dem Level "error" loggen. Ich dachte aber, ich frag mal, ob jemand vielleicht eine Idee hat. Ich fand Fingers Crossed für den Produktiv Betrieb eigentlich eine schöne Sache.
Lesezeichen