Hallo,
ich schreibe ein Programm und nutze für das Logging log4j von apache. Ich rufe mein Programm mit Parametern auf, von denen auch welche in den Logdatei-Namen einfließen sollen, von daher kann ich diesen nicht in der log4j.properties hinterlegen.
Ich erzeuge dann den Logger folgendermaßen:
Führe ich das Programm aus bekomme ich zwei Warnungen, weil er die Konfiguration zu dem Logger FileLogger nicht finden kann, logisch! Aber wenn ich in der log4j.properties einen FileAppender angebe braucht dieser auch einen Dateinamen und den kann ich nicht nehmen, da dieser erst zur Laufzeit bestimmt werden soll.
Kann mir jemand helfen? Wie kann ich zur Laufzeit einen Logger erzeugen der in ein Datei schreibt ohne, dass er vorher in der log4j.properties aufgeführt ist und ohne dass warnings bei der Ausführung entstehen.
Vielen Dank Euch
Clumsy
ich schreibe ein Programm und nutze für das Logging log4j von apache. Ich rufe mein Programm mit Parametern auf, von denen auch welche in den Logdatei-Namen einfließen sollen, von daher kann ich diesen nicht in der log4j.properties hinterlegen.
Ich erzeuge dann den Logger folgendermaßen:
Java:
private static Logger filelogger = Logger.getLogger("FileLogger");
die folgende Methode soll den Logger bearbeiten:
private void handleLogging() throws DeployToolException {
String logfile = properties.getProperty(Properties.DEPLOY_SERVER_ROOT_DIR);
logfile += properties.getProperty(Properties.DEPLOY_SERVER_LOG_DIR);
logfile += "/";
logfile += properties.getProperty(Properties.DEPLOY_SERVER_LOG_FILE);
logfile += ".";
SimpleDateFormat fmt = new SimpleDateFormat();
fmt.applyPattern( "yyyyMMdd-HHmmss" );
Calendar cal = Calendar.getInstance();
logfile += fmt.format(cal.getTime());
logfile = logfile.replaceAll(" ", "_");
String fileloglevel = properties.getProperty(Properties.DEPLOY_SERVER_FILE_LOG_LEVEL);
String consoleloglevel = properties.getProperty(Properties.DEPLOY_SERVER_CONSOLE_LOG_LEVEL);
String logpattern = "";
DeployToolMode mode = new DeployToolMode();
if (mode.isReleaseMode()) {
logpattern = properties.getProperty(Properties.DEPLOY_SERVER_LOG_PATTERN_RELEASE);
}
else {
logpattern = properties.getProperty(Properties.DEPLOY_SERVER_LOG_PATTERN_DEBUG);
}
try {
PatternLayout layout = new PatternLayout(logpattern.toString());
FileAppender fileAppender = new FileAppender(layout, logfile.toString(), false);
filelogger.addAppender(fileAppender);
filelogger.setLevel(Level.toLevel(fileloglevel.toString(), Level.DEBUG));
ConsoleAppender consoleAppender = new ConsoleAppender(layout);
consolelogger.addAppender(consoleAppender);
consolelogger.setLevel(Level.toLevel(consoleloglevel.toString(), Level.INFO));
}
catch (Exception ex) {
throw new DeployToolException(DeployToolMessage.getProperties().getMessage("e102", logfile, ex.toString())); // Beim Erstellen der Log-Datei ist ein Fehler aufgetreten
}
DeployToolMessage.getProperties().logger("i101", logfile); // Das log für diesen Auftrag findet man in:
}
Führe ich das Programm aus bekomme ich zwei Warnungen, weil er die Konfiguration zu dem Logger FileLogger nicht finden kann, logisch! Aber wenn ich in der log4j.properties einen FileAppender angebe braucht dieser auch einen Dateinamen und den kann ich nicht nehmen, da dieser erst zur Laufzeit bestimmt werden soll.
Kann mir jemand helfen? Wie kann ich zur Laufzeit einen Logger erzeugen der in ein Datei schreibt ohne, dass er vorher in der log4j.properties aufgeführt ist und ohne dass warnings bei der Ausführung entstehen.
Vielen Dank Euch
Clumsy
Zuletzt bearbeitet: