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);

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值