Logging mit log4j in Maven Projekt integrieren

Log4j Properties in Maven Projekt integrierenLog4j 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");
}

Maven – JAR mit allen Dependencies erstellen

jarWenn mit Maven eine JAR-Datei erzeugt wird werden die abhängigen Libraries im Normalfall nicht mit in das JAR aufgenommen. Soll jedoch ein lauffähiges Programm ausgeliefert werden, so müssen alle Dependencies zu einem JAR zusammengefasst werden. Diese Aufgabe übernimmt das Maven Assembly Plugin. In der POM-Datei des Hauptprojektes wird es als Plugin aufgenommen und ihm mitgeteilt wo sich die Klasse mit der Main-Methode befindet. Über das Attribut „finalName“ kann der Name der zu erzeugenden JAR-Datei festgelegt werden. Abschließend wird Assembly Plugin über die Execution-Einstellungen an die Package-Phase des Maven Lebenszyklus gebunden. Ein JAR mit allen abhängigen Klassen kann dann über den Package-Befehl erstellt werden:

mvn clean package

POM Inhalt:

<build>
		<plugins>
			<plugin>
				<artifactId>maven-assembly-plugin</artifactId>
				<configuration>
				    <finalName>JAR_NAME</finalName>
				    <appendAssemblyId>false</appendAssemblyId> 
					<descriptorRefs>
						<descriptorRef>jar-with-dependencies</descriptorRef>
					</descriptorRefs>
					<archive>
						<manifest>
							<mainClass>net.it_adviser.test.MainClass</mainClass>
						</manifest>
					</archive>
				</configuration>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>attached</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

Java Webanwendungen mit Maven erstellen

Das Grundgerüst einer Java-Webanwendung lässt sich mit Maven schnell erstellen. Webanwendungen stellen das GUI (Graphical User Interface) des Programms in Form von Webseiten mit HTML, CSS und JavaScript dar. Um die Programmoberfläche zu erstellen stehen verschiedene Java Frameworks bereit, wovon einige am Ende des Artikels genannt werden. Das fertige Kompilat / Programm ist eine Datei mit der Dateiendung *.war (Web Archive), welche in einem Servlet Container wie Tomcat oder einem Anwendungsserver wie Wildfly deployed wird.

Falls Maven noch nicht installiert ist, wird hier erklärt wie die Installation unter Windows durchgeführt werden kann.
Als erstes erstellen Sie ein Verzeichnis in dem die Webanwendung erstellt werden soll und navigieren in der Windows Konsole (Windows-Taste + R -> cmd ) in dieses Verzeichnis. Die grundlegende Struktur der neuen Webanwendung kann durch einen einzigen Maven Befehl erzeugt werden.

mvn archetype:create -DgroupId=GROUPID -DartifactId=ARTIFACTID -DarchetypeArtifactId=maven-archetype-webapp

Hier wird Maven (mvn) mit dem Create-Befehl für das archetype Plugin aufgerufen. Parameter werden mit „-D“ eingeleitet. Bei dem Anlegen des Webprojektes muss über die Parameter eine GroupID und eine ArtifactID übergeben werden.

groupId – Der Paketname für das Projekt. Als GroupId wird meist der Domain Name verwendet, unter dem die Anwendung später erreichbar sein soll. Die einzelnen Bestandteile des Domainnamen werden dabei in umgekehrter Reihenfolge angegeben.
artifactId – Der Projektname. Die ArtifactId wird als Verzeichnisname für das Projekt genutzt und ist später in der URL der Webanwendung vorhanden. http://localhost:8080/artifactID
archetypeArtifactId – Der Archetype gibt das von dem Create-Befehl verwendete Template an. In unserem Fall ist dies das Template für eine Webanwendung. Würde der Befehl werggelassen erstellt Maven ein Standard Java-Projekt.

Beispiel:

mvn archetype:create -DgroupId=net.it_adviser.webapp -DartifactId=WebApp -DarchetypeArtifactId=maven-archetype-webapp

Das Programm kann mit dem Maven Befehl Package im Root Verzeichnis der Anwendung kompiliert werden und somit die zur Distribution fertige WAR-Datei erstellt werden. Das fertige Kompilat befindet sich im „target“ Verzeichnis:

mvn package

In Eclipse kann das Mavenprojekt einfach importiert werden. Dazu wird der das neue Verzeichnis mit der Webanwendung in das Workspace Verzeichnis kopiert und anschließend importiert. Dazu sollte in Eclipse nicht das Embedded Maven genutzt werden, sondern die externe Maven-Installation. Dies kann Preferences eingestellt werden. (Window -> Preferences -> Maven -> Installations). Das neue Projekt kann einfach über das Menü importiert werden: (File -> Import -> Maven -> Existing Maven Projekt). Dort wählen Sie das Root Verzeichnis des neuen Webprojektes und importieren die POM-Datei (Project Object Model). Siehe Bild:

Maven_Projekt_Importieren

Projektstruktur im Eclipse Projektexplorer:
Java_Webprojekt_ProjectExplorer

Für die Erstellung einer ansprechenden Weboberfläche stehen eine reihe von Frameworks bereit. u.a:
Die „Klassiker“
JSP – Java Server Pages
JSF – Java Server Faces

Moderner
Primefaces
Richfaces
GWT – Google Webtoolkit
Vaadin (GWT basiert)
Sencha GXT (GWT basiert)

Apache Maven installieren

maven-logoMaven ist ein auf Java basierendes Build-Management-Tool der Apache Software Foundation mit dem standardisierte Java Programme erstellt und verwaltet werden können. Maven verfolgt dabei das Prinzip des „Convention over Configuration“ wodurch viele Schritte (u.a. Projektaufbau, Kompilieren, Testen, Packen, Distribution) über den gesamten Zyklus der Softwareerstellung standardisiert sind und automatisiert werden.

Installation von Apache Maven unter Windows

1. Maven benötigt das Java Development Kit (JDK).
2. Wenn das JDK vorhanden ist kann Maven heruntergeladen werden und in ein beliebiges Verzeichnis entpackt werden. z.B. nach C:\Maven
3. Anschließend müssen einige Systemvariablen gesetzt werden, die im Dialog Systemvariablen (Windows Taste + Pause Taste -> Erweiterte Systemeinstellungen -> Reiter „Erweitert“ -> Umgebungsvariablen…) gepflegt werden. Dabei müssen die Pfade zum Java SDK und Maven entsprechend ihrer Lage auf der Festplatte angepasst werden.

Systemvariablen setzen:

JAVA_HOME C:\Program Files\Java\jdk1.7 
M2_HOME C:\Maven
MAVEN_OPTS -Xms256m -Xmx512m 
PATH %JAVA_HOME%\bin;%M2_HOME%\bin

Maven Ungebungsvariablen

4. Die Installation kann überprüft werden, indem in der Windows Console (Windows-Taste + R ->“cmd“) der Befehl „mvn -Version“ aufgerufen wird:

C:\>mvn -version
Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 14:51:
28+0100)
Maven home: D:\Maven\bin\..
Java version: 1.7.0_21, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.7.0_21\jre
Default locale: de_DE, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"

5. Maven legt auf der lokalen Festplatte ein lokales Repository an, welches standardmäßig im Benutzerverzeichnis liegt:

  • unter XP im Verzeichnis C:\Dokumente und Einstellungen\{Kürzel}\.m2
  • unter Windows 7 im Verzeichnis C:\Users\{Kürzel}\.m2

Das Repository kann verschoben werden, indem in der „settings.xml“ die im oben genannten Pfad liegt der folgende Eintrag angepasst und aus dem Kommentar genommen wird:

D:/repository