Ответ 1
Вы можете решить свою проблему с помощью Диагностического контекста:
import org.slf4j.MDC;
public class Main {
public static void main(String... args) {
// put process ID early
MDC.put("process_id",
ManagementFactory.getRuntimeMXBean().getName());
}
}
После этого все, что вам нужно, это переопределить свой шаблон следующим образом:
<pattern>{..., "process_id": "%X{process_id}"}</pattern>
EDITED
Также вы можете создать свой собственный энкодер и конвертер и использовать их в logback.xml
:
import ch.qos.logback.classic.PatternLayout;
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
public class ExtendedPatternLayoutEncoder extends PatternLayoutEncoder {
@Override
public void start() {
// put your converter
PatternLayout.defaultConverterMap.put(
"process_id", ProcessIdConverter.class.getName());
super.start();
}
}
import ch.qos.logback.classic.pattern.ClassicConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;
import java.lang.management.ManagementFactory;
public class ProcessIdConverter extends ClassicConverter {
private static final String PROCESS_ID =
ManagementFactory.getRuntimeMXBean().getName();
@Override
public String convert(final ILoggingEvent event) {
// for every logging event return processId from mx bean
// (or better alternative)
return PROCESS_ID;
}
}
<encoder class="some.package.ExtendedPatternLayoutEncoder">
<pattern>{..., "process_id": "%process_id"}</pattern>
</encoder>