2014-09-09 13 views
5

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

+0

Sarei sorpreso se è possibile accedere da più JVM allo stesso file. Felice di essere smentito. Chronicle Logger fa questo, ma non è banale da implementare. –

+0

@PeterLawrey - Fallo adesso, funziona bene fuori dalla scatola. Le righe del registro sono interfogliate nel file. – SRobertJames

+0

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

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.