Difference between revisions of "Logging"

From SIMA wiki
Jump to: navigation, search
Line 50: Line 50:
 
-----------------------------------
 
-----------------------------------
  
Das hier hat lange gedauert herauszufinden, deswegen möchte ich das Wissen teilen.
 
  
 
How to use color-coding in Log4j
 
How to use color-coding in Log4j
Line 107: Line 106:
 
That is because jansi detects when the standard output is redirected and does not output the escape sequences anymore.
 
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");
 
So try adding this to your code, before using jansi: System.setProperty("jansi.passthrough", "true");
 
Lg
 
Alexander
 

Revision as of 10:12, 5 September 2013

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);




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:

  1. Root logger option

log4j.rootLogger=OFF

  1. Direct log messages to stdout
  2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  3. log4j.appender.stdout.Target=System.out
  4. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  5. log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
  6. 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");