2016-04-29 1 views
2

Welche der folgenden Möglichkeiten bietet eine bessere Nutzung des Loggers?Logger-Nutzung, ist die Parametrisierung besser oder mit + zum Hinzufügen von Argumenten?

  1. Parametrieren (log4j 2)

    logger.info("User {} has logged in using id {}", map.get("Name"), user.getId());` 
    
  2. Mit + Operator (log4j)

    logger.info("User"+ map.get("Name") +" has logged in using id " +user.getId());` 
    

Und warum?

+0

Warum ist es? Ich möchte wissen, was passiert, wenn wir parametrisieren. Ich finde den Code für die Parametrisierung offenbar nicht. Auch, wenn für log4j logger.info nur Objekt und throwable erlaubt. nicht mehrere Argumente. – nandini

+0

Nun, anstatt ein uraltes Logging-Framework wie 'log4j' zu verwenden, verwenden Sie ein besseres (oder vorzugsweise eine Logging-Fassade wie' SLF4J'). – Kayaman

+0

Ja .. Ich habe den Code von jemand anderem bearbeitet. Sie hatten bereits log4j. Ich werde es ändern. Vielen Dank. Ich wusste, Parametrierung ist besser, wusste aber nicht den Grund. Deine Antwort erklärt das. Danke @kayaman :) – nandini

Antwort

0

Selbst wenn es nichts anderes gäbe, würden die zusätzlichen StringBuilder shenanigans, die bei Verwendung von + passieren, die Verwendung von Parametern zur offensichtlichen Wahl machen.

Nicht zu erwähnen, dass bei der Verkettung der Werte die toString() Methode aller Parameter aufgerufen wird, auch wenn die Protokollierungsstufe nicht aktiviert ist, was bedeutet, dass Sie CPU verschwenden, um einen String zu erstellen, der niemals protokolliert wird. Dies hätte eine (wenn auch geringfügige) Auswirkung, wenn viele debug()-Anweisungen vorhanden sind, wenn DEBUG-Level normalerweise in Produktionsumgebungen deaktiviert ist.

Diese Antwort basiert auf modernen Logging-Frameworks, nicht veraltete wie Log4J.

0

Parameterized messages Vermeiden Sie die Formatierung des Textes, bis Log4j sicher ist, dass die Nachricht protokolliert wird. Dadurch können Sie vermeiden, den Aufruf logger.debug (...) mit Überprüfungen wie if (logger.isDebugEnabled())... zu umgeben, die saubereren Code liefern.

Diese Antwort basiert auf modernen Logging-Frameworks, nicht veraltete wie Log4J.

Wenn Sie "veraltet" sagen, müssen Sie über Log4j 1.x sprechen. Ab dem Jahr 2014 ist Log4j 2 das modernste Open-Source-Protokollierungs-Framework. Es braucht einige Ideen von SLF4J, wie parameterized log messages, aber fügt ein Plugin-System, so dass Sie einfach custom appenders10, benutzerdefinierte Layouts und custom lookups hinzufügen können. Desweiteren unterstützt Log4j 2 custom log levels, lambda expressions und das sperrfreie und sehr performante Async Loggers. Um die Dinge aufzupeppen, ist Log4j 2 ab Release 2.6 garbage-free.

Kayaman spricht wahrscheinlich über Log4j 1, die End of Life seit August war 2015

Verwandte Themen