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
5
A
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ý.
Các vấn đề liên quan
- 1. Log4j2 bao gồm tên thư viện trong ngăn xếp
- 2. Làm thế nào để bao gồm các thông điệp Log4j2 trong TestNG báo cáo
- 3. Tái chế PID PID
- 4. asp.net scriptbundle nhiều bao gồm vs đơn bao gồm
- 5. Phía máy khách bao gồm phía máy chủ bao gồm?
- 6. Bao gồm jQuery, nếu không bao gồm đã
- 7. PHP bao gồm
- 8. Bao gồm API slf4j
- 9. Tổ chức bao gồm
- 10. DatePicker bao gồm Năm
- 11. PHP auto bao gồm
- 12. Bao gồm tệp .cpp?
- 13. AsNoTracking() và Bao gồm
- 14. Bao nhiêu PHP bao gồm quá nhiều?
- 15. Bao gồm các file JS trong một file xhtml được bao gồm sử dụng ui: bao gồm
- 16. Url.Không bao gồm số cổng
- 17. Bao gồm các tệp R?
- 18. Bao gồm js từ raw.github.com
- 19. AFNetworking bao gồm tiêu đề
- 20. SSI hoặc PHP Bao gồm()?
- 21. C++ bao gồm vấn đề
- 22. Makefile bao gồm tiêu đề
- 23. Node.js EJS bao gồm lỗi
- 24. Bao gồm tăng trong xcode
- 25. XCode bao gồm đường dẫn
- 26. Java Javadoc bao gồm Private
- 27. Entity Framework bao gồm đâu
- 28. Bao gồm JAXB bằng Maven
- 29. Log4j2 - cấu hình
- 30. Bao gồm trong tập tin tiêu đề vs forward-kê khai, bao gồm trong cpp
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. –
@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
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