Meine Anwendung verwendet log4j für die Protokollierung und ich in der Regel durch Überprüfen Sie die Anmeldung, ob ein bestimmtes Niveau aktiviert ist und melden Sie sich dann wie folgt ausLogging Komplexität und die Sorge um Message Leistung
if(Logger.isApplicationDebugEnabled()){
Logger.logApplicationDebug("something"+values);
}
das jetzt, wenn Sie sich über unseren Zweigüberdeckung reduziert während jUnit Tests. Um dies zu überwinden, schlug mein Freund vor, "wenn" für die Protokollierung zu überprüfen.
- Zuerst einer meiner Freunde schlug vor, das if zu entfernen und direkt zu überprüfen. Das Problem bei diesem Ansatz ist, dass es die Anwendung aufgrund der Bildung von Strings verlangsamen könnte, die ohnehin nicht in den Protokolldateien landen würden.
Der zweite Ansatz, an den ich dachte, war SLF4j sehr ähnlich.
Logger.debug ("Nummer {0}, mit Datum {1, Datum}", 1234, neues Datum());
Das fühlte sich sehr attraktiv und einfach. (Diese Lösung intern verwendet MessageFormat.format (str, Objekt []) Methode. Aber ich bin besorgt über die Leistung dieses haben könnte. Beachten Sie auch, dass ‚Logger‘ ist mein interne Klasse und in jeder seiner Log-Methoden gibt es eine Überprüfung der Log-Aktivierung. Was meinst du? Ich ging durch Geschwindigkeitsvorlagen, aber es erfordert eine Karte der Parameter.Es gibt eine leichte Lösung, die nur Werte auf Param ersetzt Index Standort oder ist diese Lösung in Ordnung?
Siehe auch http://stackoverflow.com/questions/105852/conditional-logging-with-minimal-cyclomatic-complexity für mögliche Lösungen zur Vermeidung von Args-Evaluierung. Die Antwort von Cletus passt jedoch besser zu Ihrem Fall. – VonC
@Ajay Machen Sie eine Logik, wenn die Protokollierung aktiviert ist, die Sie nicht tun, wenn die Protokollierung ausgeschaltet ist? Wenn nicht, sollte es ausreichen, nur mit aktivierter Protokollierung zu laufen. – Nicolai
@Nicolai. Nee! Ich habe keine Logik in Logging-Anweisungen. Ich benutze cobertura für die Messung von Code/Zweigabdeckung. Das Problem ist, Covertura Branch Berichterstattung erwartet die Junits mit Anmelden und ein weiteres Junit mit Abmelden laufen! – Ajay