2009-05-26 10 views
0

Ich versuche herauszufinden, wie Sie die Funktionen java.util.logging verwenden. Alle Tutorials zeigen, wie man sich von der Hauptklasse in eine Protokolldatei einloggt, aber ich kann nicht herausfinden, wie ich mich in verschiedenen Klassen in einer Datei anmelden kann. Ich habe einen Web-Service und einen Web-Service-Client und möchte Fehler im Web-Service protokollieren, während ich den Web-Service-Client verwende.Java-Logger zu einer Datei über mehrere Klassen und Pakete

Ich habe versucht, eine Logger-Klasse zu erstellen, aber ich endete mit 38 leeren Protokolldateien. Wie soll ich einen Logger erstellen, der in jeder meiner Klassen im Web-Service aufgerufen wird? Der Webservice hat zwei verschiedene Pakete und verschiedene Klassen.

In meiner Suche habe ich für eine Singleton-Logger-Klasse auf die Idee kommen. Ich versuche, herauszufinden, wie es zu implementieren:

public class Logger{ 

private static Logger self = new Logger(); 

//empty private constructor 
private Logger(){ 

} 

//synchronized getInstance 
public static synchronized Logger getInstance(){ 
    if (self == null) 
     self = new Logger(); 
    return self; 
} 

//prevent cloning 
public Object clone() throws CloneNotSupportedException { 
    throw new CloneNotSupportedException(); 
} 

//synchronized logging 
public synchronized void debug(String msg){ 

} 
public synchronized void info(String msg){ 

} 
public synchronized void fatal(String msg){ 

} 

}

Um dies zu nennen in meinen anderen Klassen, würde ich einen Filehandler in jeder Klasse erstellen müssen?

Antwort

2

Das ist, was die JDK logging framework hat Handlers für. Fügen Sie einen FileHandler zu einer Protokollfunktion hinzu, die sich im Stammverzeichnis Ihrer Protokollierungshierarchie befindet, und alles wird in diesem Dateihandler protokolliert. Sie müssen darauf achten, dass die Handler auch ihre eigenen Protokollebenen haben.

Sie müssen also kein eigenes Protokollierungs-Framework implementieren. Es ist schon da und es ist schon gut. (Und wenn Sie die JDK-Protokollierung nicht mögen, verwenden Sie Apache Commons Logging mit dem JDK-Logger oder log4j.)

+0

Was ich herausfinden möchte, ist, wie man den "root" Logger einrichtet. Wenn ich Klassen: client.alerts.AlertHandler client.alerts.AlertTimer client.alerts.Connect client.weather.Weather client.weather.WeatherData Was würde ich in jedem von diesen setzen, so konnte ich Logge dich in eine Datei ein. Jedes Beispiel, das ich finde, zeigt, wie man von nur einer Klasse zu einer Protokolldatei protokolliert. Ich weiß nicht, wie ich mich von mehreren Klassen in einer Protokolldatei anmelden kann. Wo ist die Wurzel meiner "Logger-Hierarchie"? – ravun

+0

Mit dem JDK wäre ein Logger namens "Client" ein geeigneter Root-Logger. Sie können auch Logger.getParent() verwenden, um den Parent eines Loggers abzurufen, bis ein Logger kein übergeordnetes Element mehr hat. Wenn Sie Ihren Root-Logger haben, verwenden Sie Logger.addHandler(), um dem Logger einen Handler hinzuzufügen. Passen Sie schließlich die Protokollierungsstufe des Handlers an (mit Handler.setLevel()) und Sie sollten alle gesetzt sein. – Bombe