Logging Messages - mehr Details?

xyss

Aktives Mitglied
Guten Abend.

Ich habe mir heute zum ersten Mal den Logger in Java angeschaut, und das Ganze auch versucht einzubauen.

Der Log wird (mit einem eigenen Formatter) in eine Datei geschrieben.
Ich habe unter anderem bei try-catch Blöcken den Logger mit eingebaut:

Java:
      try {
//...
            }
		      } catch (Exception e) {
		    	  logger.severe(e.getMessage());
		    	  e.printStackTrace();
		      }

Ich habe mich noch nicht so wirklich mit den Messages die einem bei Fehlermeldungen "rausgeworfen" werden, befasst (ich wüsste ehrlich gesagt auch nicht, nach was ich genau suchen sollte), und leider hat Google auch nichts konkretes ergeben:

Mein Problem ist, dass mir das Ganze weniger "Informationen" liefert, als gewollt. So ist bei einer Null-Pointer Exception e.getMessage() einfach nur "null". Lieber wäre mir allerdings eine Ausgabe wie die auf der Konsole (java.lang.NullPointerException, at.... )
Vielleicht habt ihr ja eine Lösung dafür, oder den ein oder anderen Link, wo ich mich reinlesen kann 😉

Liebe Grüße
 
Ich kann nur raten, da ich nicht weiß, welches Logging Framework, falls überhaupt, verwendet wird.

Jedoch kann der Log4J Logger mit logger.servere("lalalala", e) auch den StackTrace ausgeben.
 
Sorry, das war wohl mein Fehler.

Ich benutze den von Java bereitgestellten Logger, da ich gehört habe, dass der Log4J Logger für die meisten Sachen zu Umfangreich wäre.
Gibt es bei diesem Logger also keine Möglichkeit, etwas derartiges hinzubekommen?
 
Es gibt keine "grossen" Unterschiede zwischen den verschiedenen Logging-Frameworks.

Da log4j sich aber frühzeitig als gutes Framework etabliert hat, wird dieses SEHR häufig eingesetzt. Ich nehme daher dieses auch und bevorzuge derzeit Apache Log4j 2.

Aber natürlich kannst du java.util.logging nutzen und es ist möglich eine Exception auszugeben/loggen.😀

Ich habe mal ein kleines Beispiel gemacht:
Java:
import java.util.logging.Level;
import java.util.logging.Logger;

public class LoggingTurtle {
	private static final Logger log = Logger.getLogger(LoggingTurtle.class.getName());

	public static void main(String[] args) {
		new LoggingTurtle().doSomething();
	}

	private void doSomething() {
		log.log(Level.FINE, "Fine Aufruf");
		log.log(Level.INFO, "Rufe Funktion auf die Exception wirft.");
		try {
			throw new IllegalArgumentException("Falscher Wert");
		} catch (IllegalArgumentException e) {
			log.log(Level.SEVERE, "Fehler aufgetreten", e);
		}
	}
}

Wenn eine Exception auftritt, wird die Exception mit ihrem Stacktrace ins Log geschrieben. Die Ausgabe auf der Konsole sieht dann so aus:
Code:
Sep 13, 2014 12:39:33 PM LoggingTurtle doSomething
INFORMATION: Rufe Funktion auf die Exception wirft.
Sep 13, 2014 12:39:33 PM LoggingTurtle doSomething
SCHWERWIEGEND: Fehler aufgetreten
java.lang.IllegalArgumentException: Falscher Wert
	at LoggingTurtle.doSomething(LoggingTurtle.java:15)
	at LoggingTurtle.main(LoggingTurtle.java:9)
Wohin das Logging die Ausgaben schreibt, konfiguriert man üblicherweise in einer Datei (bei java.util.logging) ist es logging.properties. Wenn du da nichts angegeben hast, wird die von der JRE genommen. Dort steht drin, das handlers= java.util.logging.ConsoleHandler (also auf die Konsole) und .level= INFO so dass alle Log-Meldungen ab INFO ins Log kommen und niedriger nicht. Daher ist die fine-Meldung nicht im Log zu sehen.
 
Danke für dieses schöne und einfache Beispiel, das hilft mir weiter!
Schon allein der Name LoggingTurtle ist super.. 😀


Ich denke damit hat sich das Thema hier erledigt, ich weiß ja nun was ich wissen wollte 🙂
 

Zurück
Oben