以往写日志的时候,往往需要先声明一下,尽管这已经很简洁, 但如果有大量的类要做类似的操作, 还是略显重复。
往往还会带来其他问题:
1、声明麻烦又冗长,可能很难记住,甚至可能每次要用的时候都要去其它地方拷贝
2、不同的类要根据当前的类名自行调整那个 xxx.class
的值, 如果粗心大意的拷贝而忘记改动还可能带来一些潜在的问题
3、如果错误引入了 Logger
和 LoggerFactory
接口也会导致一些潜在的问题
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class LogDemoController {
// 自行声明
private static final Logger log = LoggerFactory.getLogger((LogDemoController.class));
//...
}
提高效率的话,可以使用lombok的@Slf4j注解
1、使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一
2、实现方式统一使用: Logback框架
使用前提:
需要引入 lombok,maven中增加相关依赖,IDEA也需要做些调整,安装相关插件,以及添加相关的日志依赖。
在类中要引入日志功能就只需要在类的上面添加@Slf4j注解即可。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@RestController
public class DemoController {
@GetMapping("/hello")
public String hello() {
//注入变量的缺省名字就是 log
log.info("enter hello...");
return "hello rest";
}
}
打印日志的基本格式
必须使用参数化信息的方式
logger.debug("Processing trade with id:[{}] and symbol : [{}] ", id, symbol);
对于debug日志,必须判断是否为debug级别后,才进行使用
if (logger.isDebugEnabled()) {
logger.debug("Processing trade with id: " +id + " symbol: " + symbol);
}
不要进行字符串拼接,那样会产生很多String对象,占用空间,影响性能。
反例(不要这么做)
logger.debug("Processing trade with id: " + id + " symbol: " + symbol);
使用[]进行参数变量隔离
如有参数变量,应该写成如下写法(这样的格式写法,可读性更好,对于排查问题更有帮助)
logger.debug("Processing trade with id:[{}] and symbol : [{}] ", id, symbol);
整合参考文章: