Вы можете добавлять / удалять Appender программно в Log4j:
ConsoleAppender console = new ConsoleAppender(); //create appender
//configure the appender
String PATTERN = "%d [%p|%c|%C{1}] %m%n";
console.setLayout(new PatternLayout(PATTERN));
console.setThreshold(Level.FATAL);
console.activateOptions();
//add appender to any Logger (here is root)
Logger.getRootLogger().addAppender(console);
FileAppender fa = new FileAppender();
fa.setName("FileLogger");
fa.setFile("mylog.log");
fa.setLayout(new PatternLayout("%d %-5p [%c{1}] %m%n"));
fa.setThreshold(Level.DEBUG);
fa.setAppend(true);
fa.activateOptions();
//add appender to any Logger (here is root)
Logger.getRootLogger().addAppender(fa);
//repeat with all other desired appenders
Я бы посоветовал вам поместить его в init () где-нибудь, где вы уверены, что это будет выполнено раньше всего.
Затем вы можете удалить все существующие приложения в корневом логгере с помощью
Logger.getRootLogger().getLoggerRepository().resetConfiguration();
и начните с добавления своего. Вам нужно, чтобы log4j находился в пути к классам, чтобы это работало.
Примечание:
Вы можете взять любой Logger.getLogger(...)
, который хотите добавить в качестве дополнений. Я просто взял root logger, потому что он лежит в основе всех вещей и будет обрабатывать все, что передается через другие appenders в других категориях (если не настроено иначе путем установки флага аддитивности).
Если вам нужно знать, как работает ведение журналов и как определяется, где записываются журналы прочитайте это руководство для получения дополнительной информации об этом.
Короче говоря:
Logger fizz = LoggerFactory.getLogger("com.fizz")
выдаст вам регистратор для категории "com.fizz".
Для приведенного выше примера это означает, что все, что было зарегистрировано с ним, будет передано в консоль и файл appender в корневом логгере.
Если вы добавите приложение в
Logger.getLogger ( "com.fizz"). AddAppender (newAppender)
запись в fizz
будет обрабатываться всеми приложениями из корневого регистратора и newAppender
.
Вы не создаете регистраторы с этой конфигурацией, вы просто предоставляете обработчики для всех возможных категорий в вашей системе.