Log4j ist eine logging Library der Apache Software Foundation und ermöglicht es Log-Ausgaben im Programm an verschiedenste Ziele zu schreiben. Das bekannteste Ziel ist sicher das Schreiben der Logmeldungen in eine Log-Datei, aber auch das schreiben der Meldungen in eine Datenbank oder das Verschicken per E-Mail ist möglich. Das Ziel der Meldungen wird über sogenannte Log-Appender in der Datei log4j.properties konfiguriert. Diese liegt in einem Maven Projekt in dem Resourcen Verzeichnis. (siehe Bild)
Datei: log4j.properties
# Root logger option log4j.rootLogger=DEBUG, file # LogLeel DEBUG und akive appender Console und Log-Datei # Log to console 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 # Log to file log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=./log.log log4j.appender.file.MaxFileSize=10MB log4j.appender.file.MaxBackupIndex=2 log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n # Log to mail log4j.appender.email=org.apache.log4j.net.SMTPAppender log4j.appender.email.SMTPHost=mail.mydomain.com log4j.appender.email.SMTPUsername=myuser@mydomain.com log4j.appender.email.SMTPPassword=mypw log4j.appender.email.From=myuser@mydomain.com log4j.appender.email.To=myuser@mydomain.com log4j.appender.email.Subject=Log of messages log4j.appender.email.BufferSize=1 log4j.appender.email.EvaluatorClass=TriggerLogEvent log4j.appender.email.layout=org.apache.log4j.PatternLayout log4j.appender.email.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n # Log to DB log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender log4j.appender.DB.URL=jdbc:mysql://localhost/DBNAME log4j.appender.DB.driver=com.mysql.jdbc.Driver log4j.appender.DB.user=user_name log4j.appender.DB.password=password log4j.appender.DB.sql=INSERT INTO LOGS VALUES('%x','%d','%C','%p','%m') log4j.appender.DB.layout=org.apache.log4j.PatternLayout # CREATE TABLE LOGS # (USER_ID VARCHAR(20) NOT NULL, # DATED DATE NOT NULL, # LOGGER VARCHAR(50) NOT NULL, # LEVEL VARCHAR(10) NOT NULL, # MESSAGE VARCHAR(1000) NOT NULL # );
Die erste Zeile der obigen Datei wird konfiguriert das Meldungen ab dem DEBUG-Level und darunter in eine Datei geschriebenen werden. Der Detailgrad wird mit steigender Anzahl an Meldungen durch die Level OFF, FATAL, ERROR, WARN, INFO, DEBUG und ALL angegeben.
Um log4j in das Programm zu integrieren reicht es die Dependency in der pom.xml hinzuzufügen. Log4j findet die weiter oben gelistete Konfigurationsdatei von alle, wenn sie sich im Resource-Verzeichnis befindet.
<dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies>
Das Ausgeben der Logmeldungen auf verschiedenen Log-Ebenen ist mit wenigen Zeilen Code erledigt:
import org.apache.log4j.Logger; public class LoggingTest{ private static Logger logger = Logger.getLogger(LoggingTest.class); logger.info("Info"); logger.warn("Warn"); logger.error("Fehlermeldung"); }