2014-09-09 29 views
5

Tôi đang sử dụng log4j2 và chạy nhiều phiên bản của cùng một mã trong các quy trình khác nhau (tức là các JVM khác nhau) cùng một lúc. Tôi muốn tất cả các quy trình đăng nhập vào cùng một tệp, xen kẽ Làm cách nào tôi có thể định cấu hình (thông qua log4j2.xml) để xuất PID, sao cho các quy trình khác nhau có thể được phân biệt trong nhật ký?log4j2: Bao gồm PID

+0

Tôi sẽ ngạc nhiên nếu bạn có thể đăng nhập từ nhiều JVM vào cùng một tệp. Hạnh phúc được chứng minh là sai. Chronicle Logger thực hiện điều này, nhưng nó không tầm thường để thực hiện. –

+0

@PeterLawrey - Làm ngay bây giờ, hoạt động tốt ra khỏi hộp. Các dòng log được xen kẽ trong tập tin. – SRobertJames

+0

Bạn có hỏi làm thế nào chương trình Java của bạn có thể nhận được PID của nó, do đó, nó có thể bao gồm nó trong mrssages đăng nhập bạn tạo ra. Hoặc là bạn hỏi làm thế nào để cấu hình log4j để * nó * chèn PID trong thông điệp tường trình? – Raedwald

Trả lời

6

Có lẽ MDC có thể giúp bạn. Hãy thử điều này:

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> 

Output:

2014-09-10 00:13:49,281 7164 INFO TestPID#main - Testing... 
         ↑↑↑↑ 
        That's the PID 

Bạn có thể muốn xem:

1

Có một plugin ProcessIdPatternConverter trong log4j2 lõi kể từ phiên bản 2.9 mà không chính xác này .

chỉ cần đặt % pid hoặc % processId trong bố cục mẫu ghi nhật ký.