Logger日志框架使用学习
1.前言
最近也开始注重开发的规范,以前开发项目的时候很少会去使用日志框架记录一些东西,部门大佬也提了希望我们着手开始尊重开发规范,所以先学习下日志框架的用法以及应用场景
2.Logger源码
我们在代码中经常能够看到以下代码,该方法的作用就是返回与参数传递类对应的logger对象。这边主要是有个LoggerFactory对我们的日志进行管理,然后从factory中取出对应的Logger
private static Logger logger = LoggerFactory.getLogger(xxx.class);
然后我们平常使用日志框架的时候用法也有很多,比如logger.info(),logger.error()
等等,让我们看看logger中有哪几种的日志记录方式。
通过源码可以发现,logger的日志记录方式主要有5种,我们正常开发一般只用到debug以上的级别,下面就详细介绍下5种级别的区别。
-
trace:顾名思义,该级别就是对程序推进的一个追踪。目前有在Spring的源码中有看到相关的用法,example:只是简单的打印了纸,感觉像
System.out.Println()
的用法log.trace("onCacheRefreshed called with count: " + newCount);
-
debug:该级别就是平常我们开发代码过程中用的比较多的一个了。主要打印我们在开发环境中需要查看,而正式服上并不需要记录的内容。
-
info:这个用途比较广泛,比如用户登录了,可以用该级别对用于登录进行记录
-
warn:主要记录写不是错误信息,但是予以相关提示这样
-
error:抛出异常的时候,可以使用该级别进行错误记录
public interface Logger {
/**
* 用于检索root logger的名称
*/
final public String ROOT_LOGGER_NAME = "ROOT";
public String getName();
public boolean isTraceEnabled();
public void trace(String msg);
public boolean isDebugEnabled();
public void debug(String msg);
public boolean isInfoEnabled();
public void info(String msg);
public boolean isWarnEnabled();
public void warn(String msg);
public boolean isErrorEnabled();
public void error(String msg);
}
3.使用场景
一般总是听人说要记录日志日志,但是我们什么时候该使用日志呢,这边根据个人理解进行了整理。
- 发生程序运行错误时,controller接收参数时进行非空校验,或者其他业务认证进行返回时,可以加入
logger.error("用户未登录xxx")
- 在执行线程任务时,为了监控线程任务的执行情况以及其他等等,需要使用日志对每个线程任务进行记录
- 接口访问调用时,在微服务时代每个服务之间相互访问,所以就有必要进行日志记录调用情况。
- 计时统计,平常我们可能会在代码中记录下某个算法的执行时间,这种也可以使用日志记录
说到底日志就是我们想要了解程序运行情况而存在的工具,避开其他条条框框的约定,对于有必要了解项目运行情况的方法中加日志就好了。一般我们做的web项目主要日志都记录在controller层以及service层,一是controller接口需要被其他微服务调用所以需要进行记录,二是我们controller可能会调用多个service中的方法,所以在service中也能进行记录帮助我们快速定位问题。剩下的比如项目中的定时任务,还有跟其他客户端联调推送数据,或者开放接口给第三方调用,都需要进行记录。