Log4j2 kullanıyorum ve aynı kodun birden çok örneğini farklı işlemlerde (yani farklı JVM'ler) aynı anda çalıştırıyorum. Tüm süreçlerin aynı dosyaya giriş yapmasını isterim, ara verdim PID'yi çıktılamak için (log4j2.xml aracılığıyla) nasıl yapılandırabilirim, böylece farklı işlemler günlüklerde ayırt edilebilir mi?log4j2: PID'yi dahil et
5
A
cevap
6
Belki de MDC size yardımcı olabilir. Bu deneyin:
Java:
import java.lang.management.ManagementFactory;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.ThreadContext;
public class TestPID {
private static final Logger LOG = LogManager.getLogger(TestPID.class);
static {
// Get the process id
String pid = ManagementFactory.getRuntimeMXBean().getName().replaceAll("@.*", "");
// MDC
ThreadContext.put("pid", pid);
}
public static void main(String[] args) {
LOG.info("Testing...");
}
}
XML:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d %5X{pid} %-5p %c#%M - %m%n" />
</Console>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
Çıktı:
2014-09-10 00:13:49,281 7164 INFO TestPID#main - Testing...
↑↑↑↑
That's the PID
Sen görmek isteyebilir:
1
tam olarak bunu yapar sürümü 2.9 bu yana log4j2-çekirdek bir eklenti ProcessIdPatternConverter yoktur .
sadece % pid veya desen düzeni günlükleri içeri % ProcessID ayarı.
Birden fazla JVM'den aynı dosyaya giriş yapabiliyorsanız şaşırırım. Yanlış olduğu kanıtlanmış olmaktan mutlu. Chronicle Logger bunu yapar, ancak uygulanması önemsiz değildir. –
@PeterLawrey - Şu an bunu yapıyor, kutudan iyi çalışıyor. Günlük satırları dosyaya eklenir. – SRobertJames
Java programınızın PID'sini nasıl alabileceğini soruyorsunuz, bu yüzden oluşturduğunuz günlük hata listelerine ekleyebilir. Veya log4j'nin nasıl yapılandırılacağını sorarsanız * bu * PID'yi log mesajlarına ekler mi? – Raedwald