规范
1 为了节约资源,少用字符拼接,应用占位符
logger.debug("Processing trade with id: {} and symbol : {} ", id, symbol);、
2 .在一个对象中通常只使用一个Logger对象,Logger应该是static final的,只有在少数需要在构造函数中传递logger的情况下才使用private final。
2.输出Exceptions的全部Throwable信息,因为logger.error(msg)和logger.error(msg,e.getMessage())这样的日志输出方法会丢失掉最重要的StackTrace信息。
3.不允许记录日志后又抛出异常,因为这样会多次记录日志,只允许记录一次日志。
4.不允许出现System print(包括System.out.println和System.error.println)语句。
5.不允许出现printStackTrace。
7.有意义的日志
通常情况下在程序日志里记录一些比较有意义的状态数据:程序启动,退出的时间点;程序运行消耗时间;耗时程序的执行进度;重要变量的状态变化。
简介
Spring Boot 整合 slf4j+log4j2 实现日志管理 - 月染霜华 - 博客园
springboot默认使用的日志(规范)接口是slf4j,下面是目前它的流行的2个实现框架:
logback:日志实现框架性能比log4j好很多、比较火热的springboot2.0以后默认推荐使用;
log4j2:Log4j 2是对Log4j的升级版,参考了logback的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升log4j2是目前日志实现框架性能最好的,没有之一。Springbot高版本不在支持log4j, log4j2在使用方面和log4j基本一样,但是log4j2不支持properties配置文件,它支持xml和json格式的配置文件。
使用日志接口便于更换为其他日志框架。若我们原始使用的是logback, 我们要使用log4j2, 我们不用修改Java 代码中的日志相关的码 logger.info(“xxx”)
,也不用修改日志相关的类的导入的包( import org.slf4j.Logger; import org.slf4j.LoggerFactory;
),只需要引入 log4j2 的 jar 和 Log4j2 对应的配置文件即可,
例如:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
// 这了两种写法都 OK,推荐第一种,不用每次都要修改类名
private static final Logger logger = LoggerFactory.getLogger(this.getClass());
private static final Logger logger = LogManager.getLogger(UserController.class);
//...
logger.debug("this is debug");
logger.info("this is info");
log4j2的依赖jar包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-log4j2 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
配置文件:
springboot使用slf4j+log4j2实现项目日志记录_Wait for的博客-CSDN博客_springboot使用slf4j