首页 > 解决方案 > 核心 Java 中的 MDC 日志记录

问题描述

在简单的 java(JDK-9) 代码中使用带有 log4j 的 MDC 时,我没有得到 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 - []

标签: javalog4jjava-9mdc

解决方案


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

公共类 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");
        }    
}

推荐阅读