虽然在简单的Java(JDK-9)代码中将MDC与log4j一起使用,但我没有为MDC定义的字段获取任何值。以下是我的Java代码和log4j.properties文件。Java代码:
import org.apache.log4j.Logger;
import org.apache.log4j.MDC;
public class Logging {
public static void main(String[] args) {
Logger log = Logger.getLogger("Logging.class");
String a="BOB";
try {
log.info("Hello");
MDC.put("userid",a);
log.debug("Texting 1");
} catch(Exception e) {
log.error(e.getMessage());
} finally {
MDC.remove("userid");
} } }
log4j.properties:
log4j.rootLogger=DEBUG,consoleAppender
log4j.appender.consoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.consoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.consoleAppender.layout.ConversionPattern=%-4r [%t] %5p %c %x - %m - [%X{userid}]%n
输出:
0 [main] INFO Logging.class - Hello - []
4 [main] DEBUG Logging.class - Texting 1 - []
在您的代码中,只需尝试更改顺序,然后再尝试。我遇到了同样的问题,我确实更改了订单并尝试过,它对我有用。让我分享我的代码。
公共类MyMDC {
public static void main(String[] args) {
Logger log = Logger.getLogger(MyMDC.class);
String a="BOB";
try {
MDC.put("userid",a);
log.info("Hello");
log.debug("Texting 1");
}
catch(Exception e) {
log.error(e.getMessage());
}
finally {
MDC.remove("userid");
}
}