MDC 登录核心 Java

MDC logging in Core Java

在简单的 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 - []

在您的代码中,只需尝试更改顺序然后尝试。我遇到了同样的问题,我确实更改了顺序并尝试过,它对我有用。让我分享我的代码。

public class 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");
        }    
}