Difference between revisions of "Logging"

From SIMA wiki
Jump to: navigation, search
(Selective Logging)
 
Line 52: Line 52:
 
-----------------------------------
 
-----------------------------------
 
== Selective Logging ==
 
== Selective Logging ==
[[Selective Logging]]
+
Select the loggings for each agent to a seperate file - [[Selective Logging]]
  
 
== Colored Logging ==
 
== Colored Logging ==

Latest revision as of 10:12, 28 August 2014

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


Zugriff auf Logger

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


Logging Level

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



Selective Logging

Select the loggings for each agent to a seperate file - Selective Logging

Colored Logging

======================================

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


Der log4j wird mit sl4j ersetzt und eine ANSI-View hinfügt, um Farben darstellen zu können. Um den Ansi-view sinnvoll zu verwenden, bitte in eclispe das Plugin ANSI Console.

Jeder soll dann in einem Configfile selbst einstellen können, welche Logger verwendet werden, welche Farben und welche Levels. Prinzipiell sollen alle Printouts in ARS durch den Logger gehen und nicht durch System.out.

Wenn ihr keine ANSI-Console verwenden wollt, könnt ihr diese Zeile dann ändern: „log4j.appender.root=commontools.Logger.JAnsiColorConsoleAppender” Zu


In eclipse „Install New Software“ bitte folgendes installieren: Site: http://www.mihai-nita.net/eclipse Plugin: Ansi Console


SL4J ist jetzt in allen Modulen implementiert und konfiguriert für eine Ausgabe auf schwarzer Bildschirm mit farbiger Text.

Im Projekt „Simulation“ gibt es log-config files, die log4j_[USERNAME].properties. Bitte für euch eigene configs anlegen. Anderfalls bekommt ihr, Errors. Es ist empfehlenswert log4j_wendt.properties zu kopieren und zu z. B. log4j_herret.properties umzubenennen.

Alle Module können dieselbe Loggerklasse im Projekt „GeneralTools“ package „logger“ verwenden.

Jeder kann sich seine eigene Loggerkonfiguration setzen. Die Konfiguration ist vom Benutzername im Projekt/Windows abhängig. Man kann Farben auch beliebig wählen, wenn man will. Das ist alles konfigurierbar. Wenn ihr keine Farben wollt, gibt es im File auskommentierte Zeilen mit einem Standardlogger von log4j. Für die Ausgabe von Farben in eclipse braucht ihr das ANSI-Consolen-Plugin.

Anbei Infos zum Thema.

Bitte in der Zukunft keine „System.out“ verwenden. Sie versauen nur die Ausgabe.