Logging
In package pa._v38.logger gibt die Klasse clsLogger. Es ist der Datalogger basiert auf log4j. Jetzt gibt es die Möglichkeit mehrerer Logger zu verwenden, um unterschiedliche Log-Levels in unterschiedliche Klassen zu verwenden. Bsp.: Für einen Fehler will ich nur Logging für Codeletes und F26 im höchsten Detail ausgeben (TRACE) und für alle anderen Klassen reichen die Errors (ERROR).
So kann man beispielhaft die Loggers definieren:
private static void specifyLoggers() { //Set the levels of specific loggers Logger.getLogger(pa._v38.modules.F46_MemoryTracesForPerception.class).setLevel(Level.TRACE); Logger.getLogger(pa._v38.modules.F21_ConversionToSecondaryProcessForPerception.class).setLevel(Level.TRACE); Logger.getLogger(pa._v38.modules.F23_ExternalPerception_focused.class).setLevel(Level.TRACE); Logger.getLogger(pa._v38.modules.F51_RealityCheckWishFulfillment.class).setLevel(Level.TRACE); Logger.getLogger(pa._v38.modules.F26_DecisionMaking.class).setLevel(Level.TRACE); Logger.getLogger(pa._v38.modules.F52_GenerationOfImaginaryActions.class).setLevel(Level.TRACE); Logger.getLogger(pa._v38.modules.F29_EvaluationOfImaginaryActions.class).setLevel(Level.TRACE); Logger.getLogger("pa._v38.decisionpreparation").setLevel(Level.INFO); }
In derjenige Klasse, der die Loggers implementiert kann man den Logger so implementieren:
private static Logger log = Logger.getLogger("pa._v38.decisionpreparation");
oder so
/** Specialized Logger for this class */ private Logger log = Logger.getLogger(this.getClass());
Aufruf an alle: Bitte Logging in euren Modulen verwenden, so das ein außenstehender aus dem Log verstehen kann was das Modul tut. Die folgenden Levels stehen zur Verfügung:
- TRACE: ausführlicheres Debugging (seit Version 1.2.12), Kommentare
- DEBUG: allgemeines Debugging (Methode DiesUndDas wurde mit Parameter SoUndSo aufgerufen …)
- INFO: allgemeine Informationen (Programm gestartet, Programm beendet, Verbindung zu Host Foo aufgebaut, Verarbeitung dauerte SoUndSoviel Sekunden …)
- WARN: Auftreten einer unerwarteten Situation
- ERROR: Fehler (Ausnahme wurde abgefangen. Bearbeitung wurde alternativ fortgesetzt)
- FATAL: Kritischer Fehler, Programmabbruch
z.B.: log.error("Error in " + this.getClass().getSimpleName() , e);
Das hier hat lange gedauert herauszufinden, deswegen möchte ich das Wissen teilen.
How to use color-coding in Log4j
======================================
Download JAnsi http://jansi.fusesource.org/index.html
Instructions and code on how to combine JANSI und Log4J https://github.com/mihnita/java-color-loggers Files attached with classes to include. Use this class in your project: commontools.Logger.JAnsiColorConsoleAppender • Download the latest color-loggers jar from releases or build them yourself • Download jansi-1.11.jar - optional, see below (jansi-1.11 is the latest one at this time, but I use nothing fancy, so I don't expect surprises with other versions) • Make sure the jar(s) mentioned above are somewhere in the classpath (whatever method you are using for your project) you should use JAnsiColorConsole* and you also needjansi.
In log4j.properties (or whatever config file you use for log4j) usecom.colorlog.log4j.AnsiColorConsoleAppender or com.colorlog.log4j.JAnsiColorConsoleAppender as appender. They work the same as org.apache.log4j.ConsoleAppender.
log4j.properties:
- Root logger option
log4j.rootLogger=OFF
- Direct log messages to stdout
- log4j.appender.stdout=org.apache.log4j.ConsoleAppender
- log4j.appender.stdout.Target=System.out
- log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
- log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
- log4j.appender.stdout.layout.ConversionPattern=%d{HH:mm:ss} %-5p\t[%t] (%F:%L) - %m%n
log4j.logger.Profileclient=TRACE, A1 log4j.appender.A1 log4j.appender.A1=commontools.Logger.JAnsiColorConsoleAppender log4j.appender.A1.target=System.out log4j.appender.A1.layout=org.apache.log4j.EnhancedPatternLayout log4j.appender.A1.layout.ConversionPattern=JAnsi> %-5p: %c{2} [%t] - %m%n
log4j.appender.A1.FatalColour={esc}[1;35m log4j.appender.A1.ErrorColour={esc}[0;31m log4j.appender.A1.WarnColour ={esc}[0;33m log4j.appender.A1.InfoColour ={esc}[1;37m log4j.appender.A1.DebugColour={esc}[1;36m log4j.appender.A1.TraceColour={esc}[1;30m
Put log4j.properties in your src-directory.
Use ANSI Plugin for eclipse:
=====================================================================
ANSI-Plugin for eclipse http://mihai-nita.net/2013/06/03/eclipse-plugin-ansi-in-console/ Note: If you use jansi, it might look like the plugin does not work. That is because jansi detects when the standard output is redirected and does not output the escape sequences anymore. So try adding this to your code, before using jansi: System.setProperty("jansi.passthrough", "true");
Lg Alexander