|
|
|
Tracing mit Log4J

|
| von shark, 20.01.2002 16:54:37 |
    (9 votes) (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. |
|
|
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.
|
|
|
|