7. Februar 2012  
  Suche:
 
  Basics
  Code-Galerie
  Forum
  FAQ
  Tipps & Tricks
  Literatur
  Knowledge Base
  Workshops
  JSP-Hosting
  JSP-Engines
  Jobbörse
  Links
  JSP-Sites
  Newsletter
  JSP-Test
  Impressum
  Username:
  
  Passwort:
  
  

  Jetzt registrieren
  Warum registrieren?

  Valid HTML 4.01!
  Valid CSS!

Tracing mit Log4J

von shark,  20.01.2002 16:54:37  (9 votes) Kommentare (2)  [vote]
Das Tracing (Logging) einer Web-Applikation ist im Wirkbetrieb die einzige Möglichkeit Programmfehler zu finden. Log4J ist im Rahmen eines Open Source Projektes entstanden und eignet sich für das Schreiben von Log-Einträgen.

Die Log4J Referenzseite informiert über aktuelle Weiterentwicklungen des nützlichen Tracing-Werkzeuges: http://jakarta.apache.org/log4j

Nach dem Download ist das Log4J Package in den Java Classpath aufzunehmen!

Das Tracing von Applikationen bringt normalerweise Performanzeinbußen mit sich. Die Architektur sowie Implementierung von Log4J ist entsprechend den laufzeitkritischen Anforderungen von Web-Applikationen optimiert worden.

Log4J unterstützt folgende Log-Level:

+ DEBUG   - zugeordnete Log-Methode debug(..)
+ INFO   - zugeordnete Log-Methode info(..)
+ WARN   - zugeordnete Log-Methode warn(..)
+ ERROR   - zugeordnete Log-Methode error(..)
+ FATAL   - zugeordnete Log-Methode fatal(..)

Log-Level implizieren unterschiedliche Prioritäten. Folgende Rangfolge ist bindend: DEBUG < INFO < WARN < ERROR < FATAL

Beispiel: Ist der Log-Level auf WARN gesetzt worden, werden keine DEBUG und INFO Traces geschrieben.

Die Konfiguration von Log4J wird über eine Konfigurationsdatei vorgenommen. In der Konfigurationsdatei definiert man Komponenten (Kategorien), die getraced werden sollen und wohin die Log-Ausgaben erfolgen (Appender). Darüber hinaus eignet sich die Konfigurations-datei auch zur Definition des Layouts von Log-Einträgen sowie zusätzlichen Parametern, wie beispielsweise den Namen einer Log-Ausgabedatei.

Eine Log4J Konfigurationsdatei wird mit dem ProxyConfigurator geladen. Der ProxyConfigurator wird folgendermaßen benutzt:
PropertyConfigurator("g:\\log\\log4j.lcf");

Bewährt hat sich die Methode, den Klassennamen als Kategoriebezeichner zu wählen. Kategorien definiert man als statische Variablen. In der Klasse "BspCategory" kann man daraufhin folgende Zuweisung vornehmen:
static Category goCategory = Category.getInstance("BspCategory.class");

Log-Ausgaben bezogen auf "BspCategory" erfolgen in diesem Fall folgendermaßen:

goCategory.info("Programmstart");
goCategory.fatal("SQL-Exception");

Das Layout der Log-Ausgaben ist frei definierbar und lehnt sich an die Konventionen der C-Funktion printf(..) an. An dieser Stelle haben wiedermal die C/C++ Umsteiger die Nase vorne, denen die Funktion printf(..) bekannt ist.

Weiterführende Informationen zu Log4J findet man auf der Log4J Referenzseite. Das nachfolgende Beispiel verdeutlicht nocheinmal die Anwendung von Log4J.

Zunächst ein JavaBean in dem Log-Ausgaben erfolgen:

package myclasses.logtest;
/**
  java package to test log4j
*/

// import related packages
import org.apache.log4j.*;

/**
  simple test class for log4j package
*/
public class LogTest
{
  // constant which defines path of log4j config file
  private static final String gstrLogConfig = "g:\\log\\log.lcf";
     
  // log4j category     
  private static Category goCategory = Category.getInstance("LogTest");
 
  /**
      public constructor which
      sets the log-environment
  */
  public static void initTest()
  {   
    // load the log configuration and initialize log context
    PropertyConfigurator.configure(gstrLogConfig);
  }
 
  /**
    simple static test method which writes
    some log statements in log-file
  */ 
  public static void testMethod1()
  {
    // some log statements     
    goCategory.info("testMethod1 called"); 
    goCategory.debug("i do something");   
    goCategory.fatal("fatal error occured!");   
    goCategory.debug("everything is allright");
    goCategory.info("testMethod1 ended");
  }
}

JSP-Seite, welche das JavaBean verwendet:

<%@page language="java" contentType="text/html" %>
<%@page import="myclasses.logtest.*"%>
<%
  // initialize test
  LogTest.initTest();

  // call static log method
  LogTest.testMethod1();
%>

Konfigurationsdatei für Log4J:

# log root categories
log4j.rootCategory=DEBUG,A1

# log-file parameter
log4j.appender.A1                = org.apache.log4j.RollingFileAppender
log4j.appender.A1.File          = logj.log
log4j.appender.A1.MaxFileSize    = 100KB
log4j.appender.A1.MaxBackupIndex = 1
log4j.appender.A1.Append        = true

# layout definition
log4j.appender.A1.layout = org.apache.log4j.PatternLayout

# format -> [2002-01-20 / 09:30:10 / LOGLEVEL / CLASSNAME] - MESSAGE
log4j.appender.A1.layout.ConversionPattern = [%d / %t / %p / %c] - %m%n

Ausgabedatei, in die entsprechende Logs geschrieben wurden:

[2002-01-20 11:08:18,092 / tcpConnection-8080-0 / INFO / LogTest] - testMethod1 called
[2002-01-20 11:08:18,092 / tcpConnection-8080-0 / DEBUG / LogTest] - i do something
[2002-01-20 11:08:18,092 / tcpConnection-8080-0 / FATAL / LogTest] - fatal error occured!
[2002-01-20 11:08:18,092 / tcpConnection-8080-0 / DEBUG / LogTest] - everything is allright
[2002-01-20 11:08:18,092 / tcpConnection-8080-0 / INFO / LogTest] - testMethod1 ended

Zu beachten ist, wenn man für "log4j.appender.A1.File= logj.log" kein Zielverzeichnis definiert, die erzeugte Log-Datei automatisch in das Root-Verzeichnis der ServletEngine geschrieben wird.

In der Log4J-Konfigurationsdatei wird der Log Level mit folgender Anweisung gesetzt: "log4j.category.myclasses.logtest=WARN"

Mit der Anweisung - PropertyConfigurator.configure("g:\\log\\log.lcf") - wird die Log4J Konfigurationsdatei gelesen und Log4J initialisiert. Es können sowohl relative also auch absolute Pfadangaben definiert worden sein. Normalerweise legt man die Log4J Konfigurationsdatei in das "\WEB-INF\Classes" Verzeichnis. Verwendet man ein WEB-Archiv (WAR-Datei), ist die Log-Datei im Kontext der Web-Applikation bekannt und es entfällt die absolute Pfadangabe zur Log4J Konfigurationsdatei.
[Druckansicht]    [Beitrag versenden]
<< zurück  Kommentieren


Hinweis: Auf dieser Seite liegen Links zu anderen Seiten im Internet. Für alle diese Links gilt: Wir betonen ausdrücklich, daß wir keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten haben. Deshalb distanzieren wir uns hiermit ausdrücklich von allen Inhalten aller gelinkten Seiten auf dieser Homepage und machen uns ihre Inhalte nicht zueigen. Diese Erklärung gilt für alle auf unserer Homepage angebrachten Links

Redaktion/Betreiber von JSP-Develop übernehmen keinerlei Gewährleistung und Verantwortung für die Richtig- und/oder Vollständigkeit von den auf den Webseiten JSP-Develop veröffentlichten Source Codes. Die Verantwortung der Verwendung/Anwendung sowie etwaige Modifikation der hier veröffentlichten Sourcen obliegt einzig dem Benutzer der Webseite, welche die veröffentlichten Sourcen in einer Applikation/Anwendung einsetzt. Durch das Kopieren und/oder Benutzen der Sourcen in einer Applikation/Anwendung bzw. etwaigen Abschriften wird dieser Rechtshinweis anerkannt.

Java, JSP, JavaServer Pages, J2EE, EJB, JDBC, JNDI, JTA, Sun, Sun Microsystems are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and in other countries. IBM, WebSphere are trademarks or registered trademarks of International Business Machines Corporation. Other trademarks and registered trademarks are the property of their respective owners.