Настройка пути к резервной копии 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 использовать новые определения. Тем не менее, это все равно похоже на обходной путь.

  • Весна: стандартная форма ведения журнала (перехватчик)
  • Установка имени файла журнала для включения текущей даты в Log4j
  • Настройка RollingFileAppender в log4j
  • Создать файл журнала MSI
  • Форматирование Log4j: возможно ли обрезать стопку стеков?
  • Сообщения Log4Net «Не удалось найти информацию о схеме»
  • Log4J: страtagsи создания экземпляров Logger
  • Почему бы не использовать java.util.logging?
  • bash: заставить exec'd обрабатывать небуферизованный stdout
  • Регистрация в OpenWrt: как узнать «wifi deauthentication»
  • Как отправить записи журнала на удаленный сервер, на котором запущен journald (systemd)
  • Interesting Posts

    Консоль API Google API – отсутствует секрет клиента

    Настройка прокси для R

    Работа с линией Разрывы на contentEditable DIV

    Как скрыть ярлыки панели задач в Windows 10 без объединения значков?

    Является ли Windows кэшированием URL-адресов файлов ярлыков Интернета?

    Какие торрент-приложения работают без головы (только из командной строки)?

    Как я могу создать криптографически безопасное псевдослучайное число в C #?

    Как получить определенный диапазон чисел из rand ()?

    Ненавязчивая проверка в Chrome не будет проверяться с помощью dd / mm / yyyy

    Intel Core i7 QuadCore на проблемах с перегревом HP Pavilion dv7

    Различия между C ++ string == и compare ()?

    JSF динамически включает src в “ui: include src =” # {bean.pagePath} “

    Если я аннулирую существующий сертификат распространения, это испортит что-либо с существующими приложениями?

    Java MVC – Как разделить сделанную текстовую игру на MVC?

    Пример диспетчера аварий

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