Atiitt 日志技术的重大问题解决法
目录
1.2. 能方便清晰的列出某一业务(如支付)的完整的处理流程 业务tag 1
1.4. ,记录参数)MDC NDC和MDC 3 MDC(Mapped Diagnostic Context,映射调试上下文) 1
使用不同的append太麻烦了。。使用tag法比较简单。
在现实的场景中经常有这样的需求,在纷繁的日志文件中,通过搜索某一个关键字(如订单号),能方便清晰的列出某一业务(如支付)的完整的处理流程。
一个笨办法是在每个日志中加上该关键字,如下所示:
logger.info("[{}] entering pay",orderId);logger.info("[{}] check whether order is repeated ",orderId);logger.info("[{}] save order to db",orderId);logger.error("[{}]", orderId, e);
......
有没有更方便的方法满足这一业务要求呢? 而不用这么麻烦要在每个日志中都要显式加上tag,所幸log4j自身就提供了这么一个方便易用的工具类--NDC。
只要在入口方法中设置tag,离开方法前remove即可。见如下示例代码:
protected static final Logger logger = LoggerFactory
.getLogger(NDCDemo.class);
void test1(long orderId){ //入口方法
NDC.push("["+orderId+"]"); //进入方法设置tag
logger.info("entering test1"); //正常记录日志 无需显式添加tag
test2();
test3();
test6();
NDC.remove(); //离开方法删除tag
}
另外除了NDC外还有一个工具类--MDC–也适用于这一场景,使用方式和NDC差不多,仍沿用上述示例,仅需部分改动:
void test1(int orderId){
MDC.put("orderId", "["+orderId+"]"); // NDC.push --> MDC.put(key , value)
logger.info("entering test1");
test2();
test3();
test6();
MDC.remove("orderId"); //NDC.remove --> MDC.remove(key)
}
Atitit 日志技术 cdc 变更数据捕获(Change Data Capture
-
- atitit log art 日志之道 v2 sbb.docx
log日志技术知识点.docx .log日志技术的最佳实践attilax总结
1. 日志的意义与作用 1
1.1. 日志系统是一种不可或缺的单元测试,跟踪调试工具 1
2. 俩种实现 [1]日志系统作为一种服务进程存在 [2]日志系统作为系统调用存在 2
3. 日志常见概念 2
3.1. 输出目的地Appender :console,文件,数据库 。。。 2
3.2. 日志级别level:DEBUG,INFO,WARN,ERROR,FATAL; 3
3.3. Layout布局 3
3.4. 上下文(手动或者aop模式,记录参数)MDC NDC和MDC 3
3.5. 二:日志聚合与分析(摘自:http: 4
4. 日志格式规范 4
4.1. 输出地点:日志,console,db 5
5. 动态切换日志 5
6. 大数据搜索与日志挖掘及可视化方案——ELK Stack:Elasticsearch、Logstash、Kibana (第2版) 5
6.1. Web用户查询日志挖掘与应用_百度百科.html 5
7. 参考资料 6