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

  • Запись журнала использования CPU / RAM в течение определенного периода времени для записи в CentOS
  • Конфигурирование Log4j Loggers Programmatically
  • Как создать пользовательский аккаунт в log4j2?
  • Как настроить ведение журнала в Hibernate 4 для использования SLF4J
  • Как отправить java.util.logging в log4j?
  • Форматирование Log4j: возможно ли обрезать стопку стеков?
  • Почему бы не использовать java.util.logging?
  • Как создать 2 отдельных файла журнала с одним конфигурационным файлом log4j?
  • Как включить BLOB-протоколирование для приложения Node.js Api на Azure?
  • Nlog Callsite ошибочен, когда используется обертка
  • Сообщения Log4Net «Не удалось найти информацию о схеме»
  • Interesting Posts

    Задержка jQuery не работает

    Насколько хороша защита пароля Word?

    Огромный файл .etl, который не исчезнет в system32, возможно остатки xbootmgr

    Программа mime-типа по умолчанию несовместима между системой и mozilla firefox / thunderbird?

    Почему элементы const должны быть инициализированы в инициализаторе конструктора, а не в его теле?

    Заменить значение в кадре данных на основе условного (`if`) оператора

    Принудительный сценарий bash для выполнения до завершения, когда некоторые элементы могут

    Формула Excel для получения первого и последнего непустого значения в строке и заголовка заголовка возврата

    Изменение уровня громкости

    JSP для создания таблицы Excel (XLS) для загрузки

    Unix zip, но исключил определенные подкаталоги (и все в них)

    Недопустимые ключевые символы CodeIgniter

    Я обновился до Windows 10, и теперь я заблокирован из своего компьютера

    Конец комбинации Ves не работает, проблема с выходом sub?

    Включить или импортировать веб-шрифты Google Web Fonts?

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