log4j Tutorial

Auf der Suche nach dem richtigen Weg, um log4j in einem Java-Projekt zu integrieren, bin ich einen großen Umweg über haufenweise Blog-Artikel mit unvollständigen Konfigurationen und falschen Angaben gegangen, bis ich letztendlich bei diesem Video angekommen bin:

Obwohl dieses Video weder auf Deutsch noch auf Englisch ist, hat es mir in genau in 2 Minuten (!) weiterhelfen können, so dass ich jetzt ein dateibasiertes Logging mit log4j in meinem Projekt habe. Mehr wollte ich gar nicht. Das Durchstöbern von diversen Blogs hat mich über 1 Stunde Zeit gekostet, die nicht nötig gewesen wäre, wenn mal jemand auf die Idee gekommen wäre, das Thema durchschaubar und nicht umständlich und überladen zu beschreiben. Immerhin ist die Einbindung von log4j eine einfache Aufgabe!

Mein Anruf an alle Blogger dieser Welt: Bemüht euch vollständige Lösungen zu schreiben! Danke.

Hier meine Kurzbeschreibung für die Verwendung von log4j in NetBeans 7.0:

  1. apache-log4j-1.2.16.zip herunterladen
  2. apache-log4j-1.2.16.zip öffnen und die Datei apache-log4j-1.2.16.jar extrahieren
  3. In NetBeans ein neues Java-Projekt erstellen
  4. Im „Projects Explorer“ auf „Libraries“ klicken
  5. Rechtsklick -> „Add JAR/Folder“
  6. log4j-1.2.16.jar auswählen („Copy to Libraries Folder“ anwählen!)
  7. Im „Projects Explorer“ auf „default package“ klicken
  8. Rechtsklick -> „New“ -> „Other…“
  9. Choose File Type: Other -> Properties File
  10. File Name: log4j
  11. Klick auf „Finish“

In die Datei „log4j.properties“ muss dann Folgendes geschrieben werden:

1
2
3
4
5
6
log4j.rootLogger=ALL
log4j.logger.logfile=ALL,logfile
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=fileappender.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

Danach kann der Logger im Java-Projekt wie folgt initialisiert werden:

1
2
private static final Logger logger = Logger.getLogger("logfile");
logger.info("Benny hat Recht! Die log4j-Installation ist easy!");

Wenn man nun sein Programm ausführt, dann wird automatisch eine Datei namens „fileappender.log“ im Hauptverzeichnis des Projektes erstellt. Möchte man einen absoluten Pfad angeben, dann sollte man das mit Forward-Slashes tun (z.B. C:/dev/repositories/local/fileappender.log).

Man kann den Logger auch komplett ohne log4j.properties konfigurieren. Dabei hilft folgender Java-Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import java.io.IOException;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
 
public class ApplicationLogger
{
 
  private static Logger logger = null;
 
  private ApplicationLogger()
  {
    super();
  }
 
  public static Logger getInstance()
  {
    if (logger == null)
      initLogger();
    return logger;
  }
 
  private static void initLogger()
  {
    try
    {
      logger = Logger.getLogger(ApplicationLogger.class);
      PatternLayout appenderLayout = new PatternLayout();
      appenderLayout.setConversionPattern("%d %p - %m%n");
      FileAppender appender = new FileAppender(appenderLayout, "C:/dev/repositories/local/log1.txt");
      logger.addAppender(appender);
      logger.setLevel(org.apache.log4j.Level.ALL);
    }
    catch (IOException ex)
    {
      logger.error("Cannot access log file: " + ex.getLocalizedMessage());
    }
    catch (Exception ex)
    {
      logger.error("Unknown exception: " + ex.getLocalizedMessage());
    }
  }
}

Anwendung:

1
2
3
4
5
6
7
8
9
10
11
12
...
import org.apache.log4j.Logger;
 
public class MainTest
{
  private static final Logger logger = ApplicationLogger.getInstance();
 
  public static void main(String[] args) throws Exception
  {
    logger.info("Hello World!");
  }
}

Hinweis:
In einem Maven-Projekt sollte die Datei log4j.properties im Ordner „src/main/resources“ gespeichert werden, da sonst folgende Fehlermeldung erscheint:

log4j:WARN No appenders could be found for logger (logfile).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

Für Maven-Projekte:

Profi-Tipp:
Wenn man seine Java-Anwendung mit einer System-Property (z.B. java -Dlog.file=C:/log.txt my_app.jar) aufruft, dann kann man diese Variable auch in der log4j.properties Datei verwenden:

1
log4j.appender.logfile.File=${log.file}

8 Gedanken zu „log4j Tutorial“

  1. Wow, ich kann dir nur zustimmen. Habe selber ewig gesucht, zig Seiten durchgelesen und bin doch nicht wirklich schlauer draus geworden.
    Dann deine entdeckt, 1min gelesen und zack verstanden. Ist ja auch super simpel..

    Und weil mich, auch als Websitenbetreiber, nervt wenn zig Besucher da waren aber niemand kommentiert von mir ein großes Danke! 🙂

  2. Vielen Dank, Thomas und Matthias. Eure Kommentare machen mich richtig stolz. Ihr zeigt mir, dass mein Plan funktioniert und es freut mich sehr, dass ich euch helfen konnte.

  3. Hallo.

    Na, da fehlt schon noch was. Ohne
    PropertyConfigurator.configure(„log4j.properties“);
    ging bei mir gar nichts!

  4. Wirklich sehr gutes Einführung in Log4j. Habe selbst mehr als 1 Stunde für die suche log4j im Web investiert. Jetzt läuft es bei mir. Vielen Dank.

  5. Gott sei Dank hab ich dieses Tutorial gefunden. Hab 3 Stunden rumprobiert ein logfile anzulegen und hiermit gings in 5 Minuten. Vielen Dank! 😀

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.