Java日志使用小结

参考文档:

Java日志使用小结

如果规范的有条理的打印日志,是程序员的基本素养之一。可以说:日志打得好,至少能提高20%的问题排查效率,所以如何优雅的进行日志输出是非常有必要的。

创新日志对象

定义logger变量为static,确保一个对象只使用一个Logger对象,避免每次都重新创建。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class UserService{
	private static final Logger logger = LoggerFactory.getLogger(UserService.class);
}

日志文件规范

  • 命名方式: 一般为projectName_logName_logType.log,比如demoproject_kafka_error.log
  • 保存时间: 一般日志保留位30天左右,如果是重要日志需要视情况而定。
  • 日志级别: 开发阶段一般使用为debuginfo,线上环境考虑到性能问题,可以设置为warnerror级别

日志打印规范

  1. 提前判断日志级别,使用占位符,防止字符串拼接和不必要代码的执行,如:
//条件判断
if(logger.isDebugEnabled){
	//使用占位符
	logger.debug("server info , id : {}, user : {}",id,user);
}
  1. 保证日志记录信息完整:日志记录的内容要包含异常的堆栈,如:
logger.error("rabbitmq consumer error,cause : {}" e.getMessage(),e);

另外,输出对象实例的时候,须确保对象重写了toString方法,否则只会输出其hashCode

  1. 正确使用日志级别,反例:
try{
	// ...
}catch(xx){
    logger.info(..);
}

这样,会导致error级别的日志打印到info日志文件中,导致错误日志中不刷新日志,影响问题排查效率。

  1. 推荐使用slf4j+logback组合
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>${lastUpdateVersion}</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>${lastUpdateVersion}</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-access</artifactId>
    <version>${lastUpdateVersion}</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>${lastUpdateVersion}</version>
</dependency>
  1. ELK日志打印时,符号的使用提高工作效率
    需要在真正的参数打印之前加分隔符,如. 或 : 或 ;,方便在ELK中进行匹配查询,如:
logger.info("UserService_selectOne.param: [UserInfo = {}]", userInfo);

同时,使用[]来包围参数可以更方便的查看日志中的参数内容。

发布了13 篇原创文章 · 获赞 4 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 像素格子 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览