Logback Appender Pfad programmgesteuert festlegen [java]


Answers

Die Verwendung der Systemeigenschaften und das erneute Laden der Konfigurationsdatei scheint sauberer zu sein:

Ändern Sie die logback.xml-Datei:

<file>${log_path:-}myfile.log</file>
....
<FileNamePattern>${log_path:-}myfile.%i.log</FileNamePattern>

Dadurch wird der Standardspeicherort für das Arbeitsverzeichnis festgelegt. Dann benutze:

System.setProperty("log_path", my_log_path);

//Reload:
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
ContextInitializer ci = new ContextInitializer(lc);
lc.reset();
try {
  //I prefer autoConfig() over JoranConfigurator.doConfigure() so I wouldn't need to find the file myself.
  ci.autoConfig(); 
} catch (JoranException e) {
  // StatusPrinter will try to log this
  e.printStackTrace();
}
StatusPrinter.printInCaseOfErrorsOrWarnings(lc);
Question

Ich versuche, Logback appender Pfad programmgesteuert festzulegen. ( RollingFileAppender mit FixedWindowRollingPolicy um genau zu sein)

Ich mache das, weil ich meinen Benutzern ermöglichen möchte, den Protokollpfad in einem Einstellungsdialog (Eclipse RCP) zu setzen

Ich habe so etwas versucht, aber ich ändere den Protokollpfad nicht von dem, was in der Konfigurationsdatei definiert ist:

Logger logback_logger = (ch.qos.logback.classic.Logger)LoggerFactory
   .getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);
RollingFileAppender<ILoggingEvent> rfappender = 
   (RollingFileAppender<ILoggingEvent>)logback_logger.getAppender("FILE");
rfappender.setFile(newFile);
FixedWindowRollingPolicy rollingPolicy = 
   (FixedWindowRollingPolicy)rfappender.getRollingPolicy();
rollingPolicy.setFileNamePattern(newPattern);