一、日志的分类
1、名字分类
log4j :log for java (因为for和4读音差不多,所以交log4j)
logBack 日志说明
注意:springBoot默认集成了logback日志
2、日志分类
根日志:全局日志 rootLogger( springboot的日志级别:info)
子日志:包日志 logger
3、日志级别
OFF=》ERROR=》 WARNING=》INFO(springboot默认)=》DEBUG(mybatis默认级别)=》ALL级别越高输出信息越少
日志级别由低到高: 日志级别越高输出的日志信息越少
二、logback简介
Logback是由log4j创始人设计的又一个开源日志组件。目前,logback分为三个模块:logback-core,logback-classic和logback-access
。是对log4j日志展示进一步改进
1、 项目中日志分类
日志分为两类
一种是rootLogger : 用来监听项目中所有的运行日志 包括引入依赖jar中的日志
一种是logger : 用来监听项目中指定包中的日志信息
2、 java项目中使用
(1) logback配置文件
logback的配置文件必须放在项目根目录中 且名字必须为logback.xml
<?xml version="1.0" encoding="UTF-8" ?> <configuration> <!--定义项目中日志输出位置--> <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> <!--定义项目的日志输出格式--> <!--定义项目的日志输出格式--> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern> [%p] %d{yyyy-MM-dd HH:mm:ss} %m %n</pattern> </layout> </appender> <!--项目中跟日志控制--> <root level="INFO"> <appender-ref ref="stdout"/> </root> <!--项目中指定包日志控制--> <logger name="com.baizhi.dao" level="DEBUG"/> </configuration>
(2)具体类中使用日志
@Controller @RequestMapping("user") public class UserController { private Logger logger = org.slf4j.LoggerFactory.getLogger(this.getClass()); @RequestMapping("findAll") public String findAll(String name) { logger.debug("debug接收的姓名是: "+name); logger.info("info接收的姓名是: "+name); logger.warn("warn接收的姓名是: "+name); logger.error("error接收的姓名是: "+name); return "index"; } }
(3)使用默认日志配置
logging: level: root: debug com.baizhi.dao: debug path: /Users/whj/aa.log file: bbb.log
三、SpringBoot中日志使用
1、将Springboot的日志默认级别改为debug
#开启日志 如果级别:off(少)>error>warn>info>debug(多)>all logging: level: root: debug com.tjcu.controller: debug com.tjcu.dao: debug
注意:因为springboot如果使用debug作为日志打印的东西太多了,所以改用info为默认日志级别,但是mybatis等使用的是debug作为默认日志级别,所以我们需要兼顾他的日志隔离级别
2、SpringBoot项目启动就会有一个默认的日志对象:logger
先配置 com.tjcu.controller: debug
#开启日志 logging: level: root: debug com.tjcu.controller: debug
controller里面使用日志对象
@Controller @CrossOrigin @ResponseBody public class EmpController { //在控制层定义日志对象 private static final Logger log = LoggerFactory.getLogger(EmpController.class); @Autowired private EmpService empService; @RequestMapping("/emp/queryAll") public List<Emp> queryall(){ List<Emp> emps = empService.showEmp(); for (Emp emp : emps) { log.debug(String.valueOf(emp)); } return emps; }
前端访问后
http://localhost:8080/ems/emp/queryAll
控制台结果
四、idea中使用日志插件简化开发
1、下载Log Support2插件
2、重启idea
3、Settings里面会新增一个Log Support目录
FrameWork框架选择slf4j
我们为什么要使用slf4j
我们自己的系统中使用了logback这个日志系统 我们的系统使用了A.jar,A.jar中使用的日志系统为log4j 我们的系统又使用了B.jar,B.jar中使用的日志系统为slf4j-simple 这样,我们的系统就不得不同时支持并维护logback、log4j、slf4j-simple三种日志框架,非常不便。
slf4j只是一个日志标准,并不是日志系统的具体实现 。理解这句话非常重要,slf4j只做两件事情:
提供日志接口
提供获取具体日志对象的方法
3、如果直接使用Android的日志会冲突
4、测试
logd+enter(回车)后idea自动帮我们添加private static final Logger log1 = LoggerFactory.getLogger(EmpController.class);
其中d代表debug,i代表info,w代表warn
@Controller @CrossOrigin @ResponseBody public class EmpController { private static final Logger log= LoggerFactory.getLogger(EmpController.class); @Autowired private EmpService empService; @RequestMapping("/emp/queryAll") public List<Emp> queryall(){ List<Emp> emps = empService.showEmp(); for (Emp emp : emps) { log.debug(""); log.info(""); log.warn(""); } return emps; }
5、使用占位的方式书写日志而不用+号拼接
{}代表占位,一个{}代表占位一个
@Controller @CrossOrigin @ResponseBody public class EmpController { private static final Logger log= LoggerFactory.getLogger(EmpController.class); @Autowired private EmpService empService; @RequestMapping("/emp/queryAll") public List<Emp> queryall(){ List<Emp> emps = empService.showEmp(); for (Emp emp : emps) { log.info("员工的信息 {} {}",emp,"这是占位"); } return emps; }