java日志打印的完全使用指南
目录
- 一、简介
- 二、常用日志框架
- 三、日志级别
- 四、logback简单介绍
- 五、常见问题
- 总结
一、简介
- 日志打印是java代码开发中不可缺少的重要一步。
- 日志可以排查问题,可以搜集数据
文章图片
二、常用日志框架 比较常用的日志框架就是logback, 一些老项目会使用log4j,他们用的都是slf4j-api统一接口。
(1) 使用log4j
log4j使用:1. slf4j-api-1.5.11.jar2. slf4j-log4j12-1.5.11.jar3. log4j-1.2.15.jar4. log4j.properties
代码中
importorg.slf4j.Logger; importorg.slf4j.LoggerFactory; Logger logger = LoggerFactory.getLogger(xx.class);
(2) 使用logback
logback使用:1. slf4j-api-1.5.11.jar2. logback-core.jar3. logback-classic.jar4. logback.xml
代码同log4j
importorg.slf4j.Logger; importorg.slf4j.LoggerFactory; Logger logger = LoggerFactory.getLogger(xx.class);
三、日志级别
TRACE < DEBUG < INFO < WARN < ERROR
日常使用较多的是error, info , debug
四、logback简单介绍 简单介绍下常用的logback,logback优点:
- 比log4j更快
- 和log4j使用了同一个接口,slf4j-api,可以非常方便切换
- 定义了功能非常丰富的appender
- 支持日志压缩
- configuration:总的父节点
- property:自定义属性
- appender:输出控制器,可以输出到控制台,自定义文件等
- logger:日志级别
- root:控制器级别
XXXXXXXX DEBUG ${log.pattern} ERROR ${log.path}/error.log ${log.path}/error-%d{yyyyMMdd}.%i.log.zip ${maxHistory} 2GB 100MB ${log.pattern} INFO ${log.path}/info.log ${log.path}/info-%d{yyyyMMdd}.%i.log.zip ${maxHistory} 2GB 100MB ${log.pattern} DEBUG ${log.path}/debug.log ${log.path}/debug-%d{yyyyMMdd}.%i.log.zip ${maxHistory} 2GB 100MB ${log.pattern}
五、常见问题
- 1、日志打的少,不好排查问题?
我们经常会遇到一个生产问题,去看日志,啥都没有,只能重新加日志,发包,再排查问题;
所以我们要养成打日志的习惯,开发环境可以debug看,生产看不了,只能加日志,在开发的时候就把必要的日志加上;
比较重要的是接口的入参,返回,重要节点开始,结束,mq发送接收等。
- 2、error, info , debug分别都什么时候使用?
error: 捕获异常的时候使用,这个没有异议
info: 比较重要的信息,使用频次不是非常高的场景,比如入参出参
debug: 一个是不是特别重要的信息,但是又不能少,还有数据量大的数据,比如大量mq信息,访问频繁的接口入参出参
- 3、开启debug好多无用的debug信息怎么办?
把项目的目录定为debug,其它定成info。这样只有本项目的debug日志会打印了
logging.level.root=info
logging.level.cn.mypackage=debug
- 4、需要自定义日志文件吗?
logback可以把日志写进自定义文件,debug,info,error分开存储,历史数据还能压缩;
按自己项目的需求来,大型项目建议分开存储。
- 5、springboot启动命令自带的日志和自定义日志文件的日志重复怎么办?
我们一般启动springboot项目命令为:nohup java -jar XXXXXXXX.jar >> XXXXXXX.log 2>&1 &
这个会生成一个日志文件,logback配置也会生成自己的日志文件,就会重复,造成空间浪费,如何取舍?
如果你们公司统一打包脚本的话,就用命令生成的日志文件吧,把logback配置去掉;
如果你们公司自由度比较高,就用logback生成的日志,把命令改成>/dev/null 就可以了
- 6、debug日志正确写法?
有些人可能打debug日志直接logger.debug("****"); 如果项目的日志级别比较高,就比较浪费性能,可以加一个if (log.isDebugEnabled()) {log.debug("XXXXXXXXXXXXX"); }
- 7、动态日志级别?
有些公司支持动态配置文件,比如diamond,nacos等,可以修改配置文件的级别,动态生效logging.level.root=info#logging.level.root=debug日常开在info,出了问题开debug找,资源有限可以这样做,不推荐生产使用
总结 到此这篇关于java日志打印的文章就介绍到这了,更多相关java日志打印内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- java|Java使用jsoup爬取网页数据
- JavaScript|JavaScript 中,用 async + await 和直接同步方式执行有什么区别(意义是什么?)
- Java 初识篇-【笔记一】
- java进阶-框架篇|springboot + VUE实现后台管理系统(集成JWT接口权限验证)
- java|多级分类、菜单等的数据库设计(一张表),以及mybatis-plus的多级分类查询(一条SQL语句)
- android程序连接网络错误 java net unknownhostexception unable to reso
- java|java byte转int 互相转换原理详解
- java|java byte转成int数组_Java任意长度byte数组转换为int数组的方法
- java|java byte 强转 int_Java byte[]转int如何实现
- java|java byte转int原理_java中int与byte数组互转代码详细分析