2016-06-23 16 views
0

Wir bewegen uns zu Log4j von einem hausgemachten Logging-Framework (aus den 90er Jahren) und ich habe Probleme, das Muster zu unseren bestehenden Logs zu konfigurieren.log4j PatternLayout Zeit seit dem letzten Log

Wir geben mit jeder Protokollzeile die Zeit seit der letzten Protokollzeile aus. Dies hilft uns oft, festzustellen, wo sich eine Verzögerung in einem Kundensystem befindet, ohne irgendwelche Berechnungen durchzuführen. Ich kann nicht sehen, wie das geht, ohne ein ganz neues Layout zu schreiben.

Kann dies mit einem PatternLayout geschehen?

Antwort

0

Dies wird von log4j nicht unterstützt. Ich nehme an, das liegt daran, dass die Leistung von log4j einen sehr hohen Durchsatz hat und eine solche Funktionalität einen erheblichen Rückgang der Skalierbarkeit verursacht.

Sie können dies jedoch immer noch erreichen, indem Sie bereits produziertes Protokoll verarbeiten, wahrscheinlich würden einige elastische oder datenbankbasierte Appender besser passen.

+0

Es wäre nur ein Performance-Hit, wenn es genau stimmen müsste, oder? Das Framework muss bereits die aktuelle Zeit lesen - das würde nur ein einziges lange dort gespeichert brauchen - es volatil machen oder ein AtomicLong würde es genau machen, aber ansonsten wäre es sicher schnell und fast immer genau? – mjaggard

+0

@mjaggard: Das Problem ist, dass die Nachrichten in der richtigen Reihenfolge formatiert werden müssen, genauso wie das Zeitdelta erreicht wird. Mit anderen Worten, weniger oder mehr müsste es auf einer einzelnen CPU synchronisieren - das würde die Skalierbarkeit beeinträchtigen. –

+0

Noch einmal, ist das nicht nur wichtig, wenn Sie sich um Millisekunden Genauigkeit kümmern. Sonst werden die Daten schließlich korrekt sein - und in diesem Fall wäre es schließlich sehr schnell, weil es passieren wird, sobald die Prozessor-Cache-Zeile in den Hauptspeicher zurückgeschrieben wird. – mjaggard