Я не совсем уверен, какой именно желаемый результат, но я думаю, что это может быть довольно близко.Обратите внимание, что я приведу пример, который переключается между пролистыванием журнала каждую миллисекунду и каждую секунду, но вы можете изменить его по своему усмотрению.
Вот пример класса, который генерирует некоторые журналы.Он устанавливает ключ контекста на «millis», так что log4j2 выберет приложение, которое катит журнал каждую миллисекунду, генерирует некоторые журналы, ждет несколько секунд, а затем устанавливает ключ контекста на «sec», чтобы выбрать приложение, которое каждый раз просматривает журналво-вторых, а затем генерирует еще несколько журналов.
package example;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.ThreadContext;
public class SomeClass {
private static final Logger log = LogManager.getLogger();
public static void main(String[] args){
ThreadContext.put("rollTime", "millis");
log.debug("This is some debug!");
log.info("Here's some info!");
log.error("Some error happened!");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
ThreadContext.put("rollTime", "sec");
log.debug("This is some debug!");
log.info("Here's some info!");
log.error("Some error happened!");
}
}
Вот файл конфигурации log4j2 (в формате XML):
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
<Routing name="MyRoutingAppender">
<Routes pattern="$${ctx:rollTime}">
<Route key="millis">
<RollingFile name="fileAppender1" fileName="logs/file.log"
filePattern="logs/file.%d{yyyy-MM-dd HH_mm_ss_SSS}.log">
<PatternLayout
pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger:%L - %msg%n" />
<Policies>
<TimeBasedTriggeringPolicy />
</Policies>
<DefaultRolloverStrategy max="2" />
</RollingFile>
</Route>
<Route key="sec">
<RollingFile name="fileAppender2" fileName="logs/file.log"
filePattern="logs/file.%d{yyyy-MM-dd HH_mm_ss}.log">
<PatternLayout
pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger:%L - %msg%n" />
<Policies>
<TimeBasedTriggeringPolicy />
</Policies>
<DefaultRolloverStrategy max="2" />
</RollingFile>
</Route>
</Routes>
</Routing>
</Appenders>
<Loggers>
<Root level="trace">
<AppenderRef ref="Console" />
<AppenderRef ref="MyRoutingAppender" />
</Root>
</Loggers>
</Configuration>
Надеемся, этот пример приблизится к тому, чего вы хотите достичь, и может помочь вам найти решение.