java - 核心 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 - []
解决方案
在您的代码中,只需尝试更改顺序然后尝试。我遇到了同样的问题,我确实更改了订单并尝试过,它对我有用。让我分享我的代码。
公共类 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");
}
}
推荐阅读
- r - 在ggplot中移动具有相同美学但不同数据的图例条目的顺序
- python - 如何在python中格式化输出字符串?
- c - 如果我将函数调用的结果作为参数传递,它会保存在哪里?
- linux - cronjob 未在 Docker 容器中运行 throw Dockerfile
- java - 如何将 ResulSet 多个值转换为 Java 对象
- mongodb - 如果交换值,Mongo db 复合唯一键不起作用
- html - 无论里面的数据如何,都创建相等的表格布局
- python - 未能加载原生 TensorFlow 运行时(MrCNN 实现的 tensorflow 兼容性)
- php - PHP 5 到 PHP 7 转译器
- r - 向 ggplot2 条形图添加标签