Настройка пути к резервной копии Appender программно

Я пытаюсь установить путь к программному обеспечению. ( RollingFileAppender с FixedWindowRollingPolicy, если быть точным)

Я делаю это, потому что хочу, чтобы мои пользователи задавали путь журнала в диалоговом окне настроек (Eclipse RCP)

Я пробовал что-то вроде этого, но я не изменяю путь журнала из того, что определено в файле конфигурации:

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

После того, как вы программно настроили свой appender, вам нужно вызвать его метод start() . Если у приложения есть подкомпоненты, start() вызовите start() в подкомпонентах. Затем вы добавляете приложение в регистратор по вашему выбору.

Вот пример:

 import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.encoder.PatternLayoutEncoder; import ch.qos.logback.core.rolling.FixedWindowRollingPolicy; import ch.qos.logback.core.rolling.RollingFileAppender; import ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy; import ch.qos.logback.core.util.StatusPrinter; import org.slf4j.LoggerFactory; import ch.qos.logback.classic.LoggerContext; public class Main { public static void main(String[] args) { LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); RollingFileAppender rfAppender = new RollingFileAppender(); rfAppender.setContext(loggerContext); rfAppender.setFile("testFile.log"); FixedWindowRollingPolicy rollingPolicy = new FixedWindowRollingPolicy(); rollingPolicy.setContext(loggerContext); // rolling policies need to know their parent // it's one of the rare cases, where a sub-component knows about its parent rollingPolicy.setParent(rfAppender); rollingPolicy.setFileNamePattern("testFile.%i.log.zip"); rollingPolicy.start(); SizeBasedTriggeringPolicy triggeringPolicy = new ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy(); triggeringPolicy.setMaxFileSize("5MB"); triggeringPolicy.start(); PatternLayoutEncoder encoder = new PatternLayoutEncoder(); encoder.setContext(loggerContext); encoder.setPattern("%-4relative [%thread] %-5level %logger{35} - %msg%n"); encoder.start(); rfAppender.setEncoder(encoder); rfAppender.setRollingPolicy(rollingPolicy); rfAppender.setTriggeringPolicy(triggeringPolicy); rfAppender.start(); // attach the rolling file appender to the logger of your choice Logger logbackLogger = loggerContext.getLogger("Main"); logbackLogger.addAppender(rfAppender); // OPTIONAL: print logback internal status messages StatusPrinter.print(loggerContext); // log something logbackLogger.debug("hello"); } } 

Вышеприведенный код является программным выражением шагов, выполняемых конфигуратором XML журнала, т.е. Joran, когда он анализирует файл RollingFixedWindow.xml .

Использование свойств системы и перезагрузка файла конфигурации кажется более чистым:

измените файл logback.xml:

 ${log_path:-}myfile.log .... ${log_path:-}myfile.%i.log 

Это установит местоположение по умолчанию в рабочий каталог. Затем используйте:

 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); 

Глядя на код журнала, я нашел обходное решение:

 rollingPolicy.stop(); rfappender.stop(); rollingPolicy.start(); rfappender.start(); 

Это заставляет Logback использовать новые определения. Тем не менее, это все равно похоже на обходной путь.

  • Как я могу регистрировать все запуски процессов в Linux
  • Альтернатива для «tail -f», которая следует за именем файла
  • Как настроить ведение журнала в Hibernate 4 для использования SLF4J
  • Отключение выхода Log4J в Java
  • Как настроить log4j только для хранения файлов журнала за последние семь дней?
  • log4j: вывод журнала определенного classа в конкретный appender
  • Отключить ведение журнала HttpClient
  • Selenium many Logs (Как удалить)
  • Включить ведение журнала Hibernate
  • Должны ли вы сообщать текст сообщений об исключениях?
  • Конфигурация log4j через аргумент (ы) JVM?
  • Interesting Posts

    Трюки для улучшения производительности прокрутки iPhone UITableView?

    как получить строку из разных локалей в Android?

    Как отобразить количество уведомлений в значке запуска приложения

    Обратное проектирование из файла APK в проект

    Как изменить имя пользователя в Windows 7?

    GetView Vs. BindView в пользовательском CursorAdapter?

    Доступ к переменной осуществляется внутри внутреннего classа. Нужно быть объявленным окончательным

    Как заставить Windows 7 запрашивать «свежий» IP-адрес с сервера DHCP?

    при масштабировании элемента с масштабом css3 он становится пиксельным до тех пор, пока анимация не будет завершена. Я анимация элемента с границей

    android: выберите изображение из галереи, затем обрезайте его и покажите в изображении

    Ошибка в : объект типа «закрытие» не является подмножеством

    Перезагружать данные диаграммы через JSON с помощью Highcharts

    Windows 10 перезагружается без предупреждения, но только один раз

    Какое свободное программное обеспечение может преобразовывать заполняемые формы pdf в заполняемый и ** savable ** pdf?

    Ripping Blu-Ray для Xbox 360 с минимальным кодированием

    Давайте будем гением компьютера.