Warum loggt java.util.logging.Logger HttpURLConnection I/O?

StehtimSchilf

Erfahrenes Mitglied
Hi Forum

Ich habe eine simple Klasse welche Posts auf einen Web-Service absetzt und Antworten entgegen nimmt. Funktioniert alles einwandfrei. Dazu verwende ich:
java.net.URL
java.net.HttpURLConnection
java.io.PrintWriter
java.io.BufferedReader

Die Klasse besitzt auch eine Instanz vom Typ java.util.Logger, damit ich irgendwelche fehlerhaften requests/responses loggen kann.

So, alles wunderbar. Wenn ich nun aber in meiner logging.properties, java.util.logging.FileHandler.level = FINER setze, dann erhalte ich in meinen Logs jede Menge von:
05.02.2010 11:25:27 sun.net.www.protocol.http.HttpURLConnection writeRequests
FEIN: sun.net.http://www.MessageHeader@1f78ef17 pairs: {POST /xmlsvr.asp HTTP/1.1: null}{..........
05.02.2010 11:25:27 sun.net.www.protocol.http.HttpURLConnection getInputStream
FEIN: sun.net.http://www.MessageHeader@1c9a6907 pairs: {null: HTTP/1.1 200 OK}{Serve..........

Einträge! Die will ich aber nicht, da ich eben Fehler logge etc... Nur ich hab keine Ahnung wie ich dieses Logging deaktiviere? Es sieht nämlich danach aus, dass dieses Logging direkt in der HttpURLConnection()-Klasse geschieht.

Jemand eine Idee?
cheerioh & Thx
SiS
 
Thx fassy

Worauf fassy abzielte: java.util.logging Interface: Filter und die Methode isLoggable() implementieren:

Code:
public class LogFilter implements Filter {
	
	/**
	 * Liste von Wörtern, die nicht geloggt werden werden, wenn  diese
	 * in einer Log-Message enthalten sind.
	 */
	String[] discardTheseWords = null;

	public LogFilter(String[] discardTheseWords) {
		this.discardTheseWords = discardTheseWords;
	}

	public boolean isLoggable(LogRecord logRecord) {
		String msg = logRecord.getMessage();
		boolean doLogging = true;
		
		
		for (String s : discardTheseWords) {
			if (msg.indexOf(s) != -1) {
				doLogging = false;
				break;
			}
		}

		return doLogging;
	}
}
wunderbar, thx
 
Zuletzt bearbeitet:
ehm noch ne Frage:

mit obigem Code muss ich zuerst:
Code:
LogFilter logFilter = new LogFilter(
   new String[]{"sun.net.www", "com.sun.activation"},
   new String[]{"sun.net.www", "com.sun.activation"});
Logger log = new Logger.getLogger("sun.net.www.protocol.http.HttpURLConnection");
log.setFilter(logFilter);

Und dies für jeden einzelnen verschiedenen Logger.
Kann ich irgendwie log.setFilter() auf alle vorhandenen Logger anwenden? Oder kann ich irgendwie über alle vorhandenen Logger iterieren? Wenn, dann könnte ich in der Iteration setFilter() anwenden. Oder kann ich da irgendwas im logging.properties setzen? habe jedoch dafür nix passendes gefunden!

cheerioh & thx
SiS
 
Zurück