| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 你真的会打印日志? -> 正文阅读 |
|
[Java知识库]你真的会打印日志? |
一看这个标题我想大家一定进来想“怼”我,你这不是小题大作吗?在java中打印日志不是一件非常简单的事情吗? 在java中常用的日志级别为DEBUG、INFO、WARN、ERROR四个日志级别。通常开发环境开启DEBUG,生产环境开启INFO级别,采用主流的日志采集工具包诸如log4j、logback。 但日志输出真的有这么简单吗?其实里面蕴含着很多的规范,或者是最佳实践,并且还有一些非常有用设计技巧方便查询关联日志的技巧,容我慢慢道来。 输出日志的终极目标:助力于快速定位问题、解决问题。 接下来将围绕该目标,阐述一下日志相关的一些最佳实践。 1、日志的基本规范首先,我们还是简单介绍一下常用的4个日志级别,并说明各个级别在使用时应该注意的问题。
2、日志进阶上述是一些基本的日志使用规范,分布式已成为企业架构的标配,一个应用至少会部署2台机器,当用户反馈业务异常时尝试去跟踪日志时会面临一个问题:去哪台业务机器上去查询日志,如果只有2台还好办,大不了一台台去尝试,但如果有10台,20台甚至上百台,在这样轮询几乎不可能实现,那该如何处理呢? 经典的ELK架构如下图所示: 然后我们查询日志就变得类似这样了: 但这些日志其实是杂乱无章的,查询出来的日志与日志之间没有任何关联性,而我们在解决特定问题时通常希望日志的**“隔离性”**,希望我们可以根据一个统一的关键字,例如请求号筛选出所有相关的日志,这样对我们分析排查问题能起到极大的促进作用。 2.1 每条日志包含一个请求序那我们如何将“请求号”统一写入到日志文件中,肯定不能要求在项目中去修改所有日志输出到地方,手动去增加请求编号。 我们可以通过自定义一个append,在append中对用户的日志统一进行二次加工。 logback、log4j都可以自定append,接下来以当前使用最广logback举例,和大家介绍一下自定义append。 1、继承 AppenderBase 并初始化 首先需要继承logback的append的基础类:AppenderBase,入下图所示: 2、重写append方法 一键三连(关注、点赞、留言)是对我最大的鼓励。 各位技术朋友们,我是《RocketMQ技术内幕》一书作者,CSDN2020博客之星TOP2,热衷于中间件领域的技术分享,维护「中间件兴趣圈」公众号,旨在成体系剖析Java主流中间件,构建完备的分布式架构体系,欢迎大家大家关注我,第一时间获得最新干货文章。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 16:53:28- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |