图文详解SpringBoot中Log日志的集成
作者:小王java 发布时间:2023-05-27 09:55:13
一、日志的分类
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级别越高输出信息越少
日志级别由低到高: 日志级别越高输出的日志信息越少
日志级别 | 使用场景 |
---|---|
DEBUG | debug级别用来记录详细的信息,方便定位问题进行调试,在生产环境我们一般不开启DEBUG |
INFO | 用来记录关键代码点的信息,以便代码是否按照我们预期的执行,生产环境通常会设置INFO级别 |
WARNING | 记录某些不预期发生的情况,如磁盘不足 |
ERROR | 由于一个更严重的问题导致某些功能不能正常运行时记录的信息 |
CRITICAL | 当发生严重错误,导致应用程序不能继续运行时记录的信息 |
二、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只做两件事情:
提供日志接口
提供获取具体日志对象的方法
4、如果直接使用Android的日志会冲突
5、测试
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;
}
6、使用占位的方式书写日志而不用+号拼接
{}代表占位,一个{}代表占位一个
@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;
}
来源:https://blog.csdn.net/weixin_44385486/article/details/122158004


猜你喜欢
- 开发一个需要常住后台的App其实是一件非常头疼的事情,不仅要应对国内各大厂商的ROM,还需要应对各类的安全管家...虽然不断的研究各式各样的
- 在一次Java解析xml文件的开发过程中,使用SAX解析时,出现了这样一个异常信息:Error on line 60 of document
- 一、创建线程启动线程—start 方法通过覆写 run 方法创建⼀个线程对象,但线程对象被创建出来并不意味着线程就开始运
- 1. 单个属性yaml 内的属性如下:server: port: 80只需在成员变量上注解 @Value(“
- Docker 存储驱动详细介绍最近做项目,期间对Docker 存储驱动不会,于是在网上找资料,并解决了,这里就记录下。目的理解docker的
- 其他的不多说了!我们来看看效果吧 一、实现方式一:直接引入compile方式A
- using System.Runtime.InteropServices; using System.Text; publicclass F
- EasyCode 插件EasyCode 插件 是一款根据表结构生成代码的很方便的Idea插件, 强烈推荐. 并且可以自定义模板来控制生成的类
- 本文实例讲述了Android编程实现的首页左右滑动切换功能。分享给大家供大家参考,具体如下:很多软件会选择左右滑动的主界面,实现方式也很多,
- 本文实例为大家分享了openoffice+jodconverter-code-3.0-bate4实现ppt转图片的具体代码,供大家参考,具体
- 关联篇:HandlerThread 使用及其源码完全解析关联篇:Handler内存泄漏详解及其解决方案一说到Android的消息机制,自然就
- 实体类时间格式化java 实体类 时间格式化注解@JsonFormat(pattern = "yyyy-MM-dd HH:mm:s
- IDEA maven没有dependenciesIDEA导入新项目没有dependencies跟plugins如图:解决办法网上方法很多,重
- java引用传递的三种类型我这里使用了mldn视频里的例子,只用于学习交流。第一种结果:调用前:50调用后:1000分析:理解:好理解第二种
- 由于大多数便携式设备支持浏览图片而不支持浏览PowerPoint 文件,所以相比较而言,图像对于用户而言更加友好。除此之外,将PowerPo
- 前言为啥需要学Feign呢?我们先来回顾之前写的代码先来看我们以前利用RestTemplate发起远程调用的代码:这里就有几个问题:代码可读
- 本文实例讲述了Android编程自定义菜单实现方法。分享给大家供大家参考,具体如下:在android开发的过程中系统自带的菜单往往满足不了开
- 前言现在市面上很多应用都会有当用户按返回键的时候提示用户:再按一次将退出应用的提示,也就是双击双击返回键退出应用,接下来我们就用几种办法来实
- 本文以C#代码为例介绍如何实现将彩色PDF文件转为灰度(黑白)的PDF文件,即 将PDF文档里面的彩色图片或者文字等通过调用PdfGrayC
- 需求:接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实体类(concrete class)?抽象类中是否