log4j: schnellste Methode zum Anzeigen des Methodennamens?

8

In meinen Logging-Nachrichten muss ich den Namen der Methode angeben, in der die Nachrichten erzeugt wurden. Ich habe Log4J Dokumentation und "M" und "l" Konvertierungszeichen, die auch Warnung wie "WARNUNG Generierung von Anruferstandort Informationen ist sehr langsam und sollte vermieden werden, es sei denn, die Ausführungsgeschwindigkeit ist kein Problem". Also habe ich (mindestens) zwei Optionen:

  1. Benutze diese Zeichen, verlangsame aber meinen Code
  2. Manuell den Methodennamen in Nachrichten einfügen, d. h. etwas wie log.info("myMethod: message"); , das schneller, aber nicht so elegant ist

Gibt es andere Optionen, die meinen Code nicht verlangsamen würden?

Danke!

    
I Z 02.04.2012, 15:19
quelle

3 Antworten

4

Ich bin mir nicht sicher, welche IDE Sie verwenden, aber wenn Sie Eclipse-basierte IDEs verwenden, sollten Sie in der Lage sein, einige Java-Vorlagen zu verwenden. Dies wird immer noch die Methodennamen als Strings verwenden, aber Sie sparen Zeit beim Tippen.

Ich habe eine ganze Reihe von Vorlagen wie folgt erstellt:

  • Vorlagenname - li
  • Muster - logger.info("${cursor}");

usw. für warn , error und debug .

Für den Anfang und das Ende der Methode oder einfach um den Methodennamen zu jedem Logout hinzuzufügen - verwenden Sie etwas wie:

  • Vorlagenname - lie
  • Muster - logger.info("End: ${enclosing_method}${cursor}");

und so weiter.

Die einzige Einschränkung ist, dass Ihre Logger-Ref-Variable immer den Namen logger haben muss. Jetzt müssen Sie nur lie eingeben und (optional ctrl + Leerzeichen drücken, wenn Sie das Kontrollkästchen Automatisch einfügen zum Zeitpunkt der Vorlagenerstellung deaktivieren. )

HTH!

    
Abhi 28.06.2012, 17:33
quelle
2

Ich benutze den grundlegenden Konfigurator die meiste Zeit und es gibt mir standardmäßig den Methodennamen. Das Hinzufügen dieser Codezeile und der Import-Anweisung ist also der schnellste Weg, um das zu bekommen, wonach Sie fragen.

%Vor%     
Risav Karna 05.07.2012 12:19
quelle
0

Wenn es eine nicht-langsame Methode zum programmatischen Abrufen dieser Informationen gäbe, würde log4j sie verwenden - leider nicht, da es sich nicht um Informationen handelt, die die JVM für die Laufzeitumgebung leicht zugänglich gemacht hat.

>

Aus diesem Grund werden bei den meisten Protokollierungscodes nur Muster verwendet, die diese Informationen auf der Debug-Ebene abrufen. Anschließend werden alle Debug-Aufrufe in der Bedingung if(logger.isDebugEnabled()) { eingeschlossen, so dass die Informationen nur abgerufen werden, wenn sich das Programm im Debug-Modus befindet. Auf diese Weise erhalten Sie beim Debuggen fein abgestufte Laufzeitinformationen, ohne die Leistung Ihres Codes während der Produktion zu beeinträchtigen.

Es ist auch wichtig, daran zu denken, dass nicht jeder Code leistungsintensiv ist, und wenn Ihr Code mit diesen verwendeten Mustern läuft und skaliert, können Sie sie genauso gut verwenden. Wenn Sie Probleme mit der Leistung haben, können Sie das noch einmal überdenken.

Nebenbei bemerkt, hat die Groovy-Sprache (seit Version 1.8) AST-Transformationen, die Logger (der java.util-, apache commons-, log4j- oder slf4j-Flavours) automatisch in Ihre Klassen einbinden - und wird auch automatisch alle Logging-Aufrufe umschließen Bedingungen zur Kompilierzeit, so dass sie nur ausgeführt werden, wenn die Protokollierung auf der entsprechenden Ebene ist. Das bedeutet, dass Sie das oben beschriebene tun können, ohne die Bedingungen explizit programmieren zu müssen, aber natürlich nur, wenn Sie Groovy schreiben.

    
Johansensen 13.07.2012 04:48
quelle

Tags und Links