Вы можете использовать RoutingAppender и getThreadName метода LogEvent , чтобы делать то, что вы хотите.
Вот простой Java-класс для генерации логирования:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class SomeClass {
private static final Logger log = LogManager.getLogger();
public static void main(String[] args){
log.debug("This is some debug!");
log.info("Here's some info!");
log.error("Some error happened!");
Thread t = new Thread(new Runnable(){
@Override
public void run() {
log.info("Here's some info!");
log.error("Some error happened!");
}
}, "foo.Cohernce.1234");
t.start();
try {
t.join();
} catch (InterruptedException e) {
log.error(e);
}
}
}
Вот файл конфигурации log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<File name="FILE" fileName="logs/logfile.log" append="true" >
<PatternLayout pattern="%d %-5r %-5p [%t] [%x] [%c] [%M] [%L] - %m%n" />
</File>
<File name="STRINGFILE" fileName="logs/logfileAA.log" append="true" >
<PatternLayout pattern="%d %-5r %-5p [%t] [%x] [%c] [%M] [%L] - %m%n" />
</File>
<Routing name="Routing">
<Routes>
<Script name="RoutingInit" language="JavaScript"><![CDATA[
if (logEvent.getThreadName() != null && logEvent.getThreadName().contains("Cohernce")) {
"Cohernce";
}else{
"OTHER";
}]]>
</Script>
<Route ref="FILE" />
<Route ref="STRINGFILE" key="Cohernce" />
</Routes>
</Routing>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Routing" />
</Root>
</Loggers>
</Configuration>
Это вывод, записанный в logfile.log
2019-06-15 01:30:00,705 645 DEBUG [main] [[]] [example.SomeClass] [main] [12] - This is some debug!
2019-06-15 01:30:00,815 755 INFO [main] [[]] [example.SomeClass] [main] [13] - Here's some info!
2019-06-15 01:30:00,818 758 ERROR [main] [[]] [example.SomeClass] [main] [14] - Some error happened!
Это вывод, записанный в logfileAA.log
2019-06-15 01:30:00,822 762 INFO [foo.Cohernce.1234] [[]] [example.SomeClass] [run] [21] - Here's some info!
2019-06-15 01:30:00,832 772 ERROR [foo.Cohernce.1234] [[]] [example.SomeClass] [run] [22] - Some error happened!