Sto utilizzando log4j2 ed eseguo più istanze dello stesso codice in processi diversi (ad es. JVM diversi) allo stesso tempo. Mi piacerebbe che tutti i processi si collegassero allo stesso file, interlacciati. Come posso configurare (tramite log4j2.xml) l'output del PID, in modo che i diversi processi possano essere distinti nei registri?log4j2: Includi PID
5
A
risposta
6
Forse MDC può aiutarti. Prova questo:
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>
uscita:
2014-09-10 00:13:49,281 7164 INFO TestPID#main - Testing...
↑↑↑↑
That's the PID
Si consiglia di vedere:
1
esiste un plugin ProcessIdPatternConverter in log4j2-core a partire dalla versione 2.9, che fa esattamente questo .
semplicemente impostando % pid o % ProcessId nei registri di modello di layout IT.
Sarei sorpreso se è possibile accedere da più JVM allo stesso file. Felice di essere smentito. Chronicle Logger fa questo, ma non è banale da implementare. –
@PeterLawrey - Fallo adesso, funziona bene fuori dalla scatola. Le righe del registro sono interfogliate nel file. – SRobertJames
Stai chiedendo in che modo il tuo programma Java può ottenere il suo PID, in modo che possa includerlo nei log mrssages generati. O stai chiedendo come configurare log4j così * it * inserisce il PID nei messaggi di log? – Raedwald