如何使用Log4cxx或log4j记录进程ID

CRK*_*CRK 9 log4j log4cxx

我正在使用log4cxx我的项目,我能够使用[%t]标记记录当前线程ID,如何在其中记录进程ID或log4j?.

我正在使用基于ConversionPattern和xml的配置文件.

谢谢,

ski*_*ppy 12

基于以上答案,我将在log4j中执行以下操作:

import java.lang.management.*;
import org.apache.log4j.MDC;

private String getPID() {
  RuntimeMXBean rt = ManagementFactory.getRuntimeMXBean();
  return rt.getName();
}

private void configLog4j() {
  // call this from somewhere before you start logging
  MDC.put("PID", getPID());
}
Run Code Online (Sandbox Code Playgroud)

然后在我的log4j.properties中:

log4j.appender.FILE.layout.ConversionPattern=%d %X{PID} [%t] %p %c{1} %x - %m%n
Run Code Online (Sandbox Code Playgroud)

这实际上会产生一个由ID号和主机名组成的PID,至少在我的Java实现上,以及我读到的可能是特定于实现的内容.你可以更进一步,只拆分PID.


dar*_*ioo 5

我已经通过log4j和log4cxx的文档进行了深入研究,在任何地方我都找不到有关日志记录进程ID的信息.

所以,简而言之:不,你不能记录进程id,至少不能直接记录进程id.

由于您使用的是C++,因此您可以获得程序的PID.以下是如何在Linux中执行此操作(此链接中为Ubuntu).是在Windows中如何做到这一点.

在程序启动时获取PID,使用MDC并将PID放入其中.

我不认为有更好的方法.

在log4j中执行此操作会更加棘手,因为我知道正在运行的程序无法使用标准Java类来获取它的PID.