SpringBoot中Log日志的集成详解

简介: SpringBoot中Log日志的集成

一、日志的分类

1、名字分类

log4j :log for java (因为for和4读音差不多,所以交log4j)

logBack 日志说明

注意:springBoot默认集成了logback日志


2、日志分类

根日志:全局日志 rootLogger( springboot的日志级别:info)


0.png


子日志:包日志 logger


3、日志级别

OFF=》ERROR=》 WARNING=》INFO(springboot默认)=》DEBUG(mybatis默认级别)=》ALL级别越高输出信息越少


日志级别由低到高: 日志级别越高输出的日志信息越少


1.png


image.png

二、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


2.png


注意:因为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;
    }


3.png


前端访问后

http://localhost:8080/ems/emp/queryAll


4.png


控制台结果

5.png


四、idea中使用日志插件简化开发

1、下载Log Support2插件

6.png


2、重启idea

7.png


3、Settings里面会新增一个Log Support目录

FrameWork框架选择slf4j


8.png


我们为什么要使用slf4j

我们自己的系统中使用了logback这个日志系统
我们的系统使用了A.jar,A.jar中使用的日志系统为log4j
我们的系统又使用了B.jar,B.jar中使用的日志系统为slf4j-simple
这样,我们的系统就不得不同时支持并维护logback、log4j、slf4j-simple三种日志框架,非常不便。

slf4j只是一个日志标准,并不是日志系统的具体实现 。理解这句话非常重要,slf4j只做两件事情:


提供日志接口

提供获取具体日志对象的方法


3、如果直接使用Android的日志会冲突

9.png


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;
    }

10.png


5、使用占位的方式书写日志而不用+号拼接

{}代表占位,一个{}代表占位一个

11.png


@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;
    }


12.png

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
10月前
|
安全 Java Apache
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 身份和权限认证
本文介绍了 Apache Shiro 的身份认证与权限认证机制。在身份认证部分,分析了 Shiro 的认证流程,包括应用程序调用 `Subject.login(token)` 方法、SecurityManager 接管认证以及通过 Realm 进行具体的安全验证。权限认证部分阐述了权限(permission)、角色(role)和用户(user)三者的关系,其中用户可拥有多个角色,角色则对应不同的权限组合,例如普通用户仅能查看或添加信息,而管理员可执行所有操作。
541 0
|
10月前
|
安全 Java 数据安全/隐私保护
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 三大核心组件
本课程介绍如何在Spring Boot中集成Shiro框架,主要讲解Shiro的认证与授权功能。Shiro是一个简单易用的Java安全框架,用于认证、授权、加密和会话管理等。其核心组件包括Subject(认证主体)、SecurityManager(安全管理员)和Realm(域)。Subject负责身份认证,包含Principals(身份)和Credentials(凭证);SecurityManager是架构核心,协调内部组件运作;Realm则是连接Shiro与应用数据的桥梁,用于访问用户账户及权限信息。通过学习,您将掌握Shiro的基本原理及其在项目中的应用。
388 0
|
7月前
|
前端开发
SpringBoot2.3.1集成Knife4j接口文档
SpringBoot2.3.1集成Knife4j接口文档
795 44
|
6月前
|
JSON 分布式计算 大数据
springboot项目集成大数据第三方dolphinscheduler调度器
springboot项目集成大数据第三方dolphinscheduler调度器
368 3
|
8月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
896 54
|
6月前
|
缓存 JSON 前端开发
第07课:Spring Boot集成Thymeleaf模板引擎
第07课:Spring Boot集成Thymeleaf模板引擎
620 0
第07课:Spring Boot集成Thymeleaf模板引擎
|
6月前
|
Java 关系型数据库 MySQL
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
685 2
|
6月前
|
分布式计算 Java 大数据
springboot项目集成dolphinscheduler调度器 可拖拽spark任务管理
springboot项目集成dolphinscheduler调度器 可拖拽spark任务管理
384 2

热门文章

最新文章