Hallo,
ich habe mir einen eigenen Logger geschrieben, der nach dem Singelton-Pattern arbeiten soll.
Nun ist es so, dass der Aufruf
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 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");
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