Logger loggt nicht alle Level

Eraser

Mitglied
Hallo,

ich habe mir einen eigenen Logger geschrieben, der nach dem Singelton-Pattern arbeiten soll.
Java:
public class LoggerImpl extends Logger {
	private static void checkInstance() throws WrongUserInteractionException {
		if (instance == null) {
			instance = new LoggerImpl();
		}
	}

	public static LoggerImpl getInstance() throws WrongUserInteractionException {
		checkInstance();
		return instance;
	}

	public static int getLogLevel() throws WrongUserInteractionException {
		checkInstance();
		return logLevel;
	};

	private static String fileName;

	private static int logLevel;

	private static java.util.logging.Logger myLogger;

	private static LoggerImpl instance = null;

	transient public final static int TESTING = 1, NORMAL = 2;

	private LoggerImpl() throws WrongUserInteractionException {
		super("LoggerImpl", null);

		initFileName();

		logLevel = LoggerImpl.TESTING;

		initLogger();
	}

	private void initFileName() {
		Calendar cal = Calendar.getInstance();
		String configPath = Configuration.getInstance().getConfigPath();

		String str = String.valueOf(cal.get(Calendar.YEAR));
		fileName = "\\log\\" + str + "_";

		str = String.valueOf(cal.get(Calendar.MONTH) + 1);
		if (str.length() == 1) {
			str = "0" + str;
		}
		fileName += str + "_";

		str = String.valueOf(cal.get(Calendar.DAY_OF_MONTH));
		if (str.length() == 1) {
			str = "0" + str;
		}
		fileName += str + ".log";

		fileName = configPath.replace("config.cfg", fileName);
	}

	private void initLogger() throws WrongUserInteractionException {
		myLogger = java.util.logging.Logger.getLogger("TA2_logger");

		try {

			FileHandler fh = new FileHandler(fileName, true);
			myLogger.addHandler(fh);

			// ConsoleHandler ch = new ConsoleHandler();
			// ch.setLevel(Level.OFF);
			// myLogger.addHandler(ch);

			if (logLevel == TESTING) {
				myLogger.setLevel(Level.FINEST);
			} else {
				myLogger.setLevel(Level.WARNING);
			}

			SimpleFormatter formatter = new SimpleFormatter();
			fh.setFormatter(formatter);

			myLogger.setFilter(new MyFilter());

			myLogger.log(Level.INFO, "Logging gestartet");
		} catch (SecurityException e) {
			WrongUserInteractionException wue = new WrongUserInteractionException(
					e.getMessage());
			throw wue;
		} catch (IOException e) {
			WrongUserInteractionException wue = new WrongUserInteractionException(
					e.getMessage());
			throw wue;
		}
	}

	public static void log(Object source, Level level, String message)
			throws WrongUserInteractionException {

		checkInstance();
		if (myLogger.isLoggable(level)) {
			message = source.getClass().getName() + ": " + message;

			myLogger.log(level, message);
		}
	}

	public class MyFilter implements Filter {

		@Override
		public boolean isLoggable(LogRecord record) {
			if (record.getLoggerName().equals("TA2_logger")) {
				return true;
			} else {
				return false;
			}
		}

	}
}

Nun ist es so, dass der Aufruf
Java:
LoggerImpl.log(this, Level.FINE, "Lorem Ipsum");
nicht geloggt wird.
Wenn ich nun aber die Level INFO, WARNING, SEVERE verwende, so funktioniert das Logging, jedoch nicht nicht FINE etc.

Weiß jemand warum? Muss ich hier einen Filter setzen? Brauche ich evtl. einen Logging-Manager?

Viele Grüße
Eraser
 
Ich habs erstmal überflogen, auch arbeite ich nur mit Log4J.

Aber logLevel == TESTING ist natürlich gesetzt, ich nehme auch an, das Logger auch darüber erfährt?
 
Ja natürlich. Dieser Wert wird im Konstruktor gesetzt.

Habe den Fehler selber gefunden^^
Mein Fehler war, dass ich vergessen habe, für den FileHandler das Log-Level ebenfalls auf das Level des Loggers zu setzen.
 
Zuletzt bearbeitet:

Zurück
Oben