Batch Logging

chickenwings

Erfahrenes Mitglied
Hallo,

ich benutze fleissg Log4j, um meine Requests, die mein Servlet entgegen nimmt, zu loggen.
Ich habe jetzt die Befürchtung, dass, wenn die Last hoch geht, was ich erwarte, das Logging nicht mehr mitkommt.
Ich bin mir nicht sicher, ob log4j so etwas wie ein Puffer-Mechanismus hat oder ob es nicht evtl. sinnvoll wäre so etwas wie ein Batch Logging, etwa alle 1000 aufkommenden Einträge zusammen weg zu schreiben, so wie es bei DB Operationen auch gemacht wird.

Hat jemand da schon mal eine Ansatz der Umsetzung erdacht wie man so etwas am Besten realisieren könnte?

Grüsse,
chickenwings
 
Hi,

zunächst würde ich Dir empfehlen entweder slf4j zu nehmen, oder selbst eine Schale für Log4J zu machen, welche das Katenieren der Strings mit Hilfe von Platzhaltern umsetzt.

Das ist i.d.R. viel teurer als das von Dir beschriebene Problem. Ein

Code:
log.debug("Blafasel : "+foo.getValue())

löst nämlich erst den Funktionsaufruf auf, kateniert dann die Strings und schaut dann in log.debug nach, ob es loggen darf. Das ist sehr teuer, gerade beim Batchen.

Code:
log.debug("Blafasel : $1", foo.getValue())

ist da etwas sparsamer. slf4j unterstützt so etwas.

Du kannst das natürlich dann per Thread entkoppeln und das ganze Logging über eine threadsichere Queue machen, die die Logwerte aus Deinem Servlet queued. Diese Queue wiederum lässt Du einfach von dem Thread auslesen und dann z.B. über log4j wegschreiben (Man kann die von mir beschriebene Mimik natürlich auch über log4j stülpen).

Grüße,
gore
 
Zurück