zoukankan      html  css  js  c++  java
  • Spring Boot笔记三:Spring Boot之日志

    三、日志

    1、日志框架

    Spring Boot选用了SLF4j和 logback组合,SLF4j作为抽象层,logback作为实现层

    2、 SLF4j使用

    1、如何在系统使用SLF4j

    对于日志记录方法的调用,应该调用日志抽象层里面的方法,而不是直接调用日志的实现类

    系统首先导入slf4j的jar和 logback的实现jar

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class HelloWorld {
      public static void main(String[] args) {
        Logger logger = LoggerFactory.getLogger(HelloWorld.class);
        logger.info("Hello World");
      }
    }
    

    每一个日志框架都有自己的配置文件,使用slf4j以后,配置文件还是用日志实现类自己本身的配置文件

    2、遗留问题

    系统a(slf4j + logback) : Spring(commons-logging)、hibernate(jboss-logging).....

    统一日志记录,即使是用了其他框架都用slf4j进行输出

    如何让系统中的所有框架的日志都统一到slf4j:

    • 将系统中其他的日志框架先排除

    • 用中间包来替换原有的日志框架

    • 再用slf4j其他的实现

    3、Spring Boot日志关系

     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
    

    Spring Boot使用它来做日志功能:

    <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-logging</artifactId>
          <version>2.3.5.RELEASE</version>
          <scope>compile</scope>
    </dependency>
    

    底层依赖关系:

    总结:

    • SpringBoot底层也是使用了slf4j+logback的方式进行日志记录

    • SpringBoot也把其他的日志替换成slf4j

    • 中间包替换

    • 排除掉原来日志框架的依赖,spring里面没有commons-logging的依赖,用jcl替代了

    SpringBoot能自动适配所有的日志,而且底层使用了slf4j+logback的日志记录方式,引入其他框架也自动转为这种记录方式

    4、日志使用

    1、默认配置

    SpringBoot默认已经配置过了

    @SpringBootTest
    class SpringBoot03LoggingApplicationTests {
        // 记录器
        Logger logger = LoggerFactory.getLogger(getClass());
        @Test
        void contextLoads() {
    
            // 日志的级别
            // 由低到高 trace<debug<info<warn<error
            // 可以调整需要输出的日志级别,日志只会在本级别以上的进行输出
            logger.trace("这是trace日志。。。");
            logger.debug("这是debug日志。。。");
            // springBoot默认提供的info级别,root级别    
            logger.info("这是info日志");
            logger.warn("这是warn日志");
            logger.error("这是error日志");
    
        }
    
    }
    
    

    也可以更改级别,在全局配置文件中,也有其他的设置配置:

    # 指定日志输出等级
    logging.level.com.wiggin=trace
    # 不指定路径在当前root目录下创建log日志
    # 可以指定路径
    #logging.file.name=G:/springboot.log
    
    
    # 在当前磁盘下根目录下创建spring文件夹,再创建log文件夹,默认创建的文件名为spring.log
    logging.file.path=/spring/log
    
    # 指定控制台输出的格式
    logging.pattern.console= %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n
    
    # 指定文件中输出的格式
    logging.pattern.file= %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n
    

    logback日志配置示例

        <!-- 控制台输出 -->
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <!-- 日志输出编码 -->
            <Encoding>UTF-8</Encoding>
            <layout class="ch.qos.logback.classic.PatternLayout">
                <!--格式化输出:%d表示日期,
                              %thread表示线程名,
                              %-5level:级别从左显示5个字符宽度
                              %msg:日志消息,%n是换行符 -->
                <pattern>
                    %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n
                </pattern>
            </layout>
        </appender>
    
    2、指定配置

    给类路径下放上各种日志框架的配置文件,原来的spring boot日志配置文件就失效了:

    Logging System Customization
    Logback logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy
    Log4j2 log4j2-spring.xml or log4j2.xml
    JDK (Java Util Logging) logging.properties

    logback.xml直接就被日志框架识别了

    logback-spring.xml:就不会别框架识别,直接被springboot识别,这样就可以使用特定功能

    <springProfile name="staging">
        <!-- configuration to be enabled when the "staging" profile is active -->
        	<!--配置在staging环境下能够被执行-->
    </springProfile>
    
    <springProfile name="dev | staging">
        <!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
    </springProfile>
    
    <springProfile name="!production">
        <!-- configuration to be enabled when the "production" profile is not active -->
    </springProfile>
    

    例如上面的logback日志在logback-spring.xml的配置下就能这样书写:

    <layout class="ch.qos.logback.classic.PatternLayout">
     <springProfile name="dev">
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}->[%thread] %-5level %logger{50} - %msg%n</pattern>
     </springProfile>
     
     <springProfile name="!dev">
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}=>[%thread] %-5level %logger{50} - %msg%n</pattern>
     </springProfile>
    </layout>
    

    5、切换日志框架

    可以在pom文件下生成关系图,通过去除其他的框架与slf4j的关系,并且引入log4j的替换包,来完成日志框架的替换:

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <exclusions>
                    <exclusion>
                        <artifactId>logback-classic</artifactId>
                        <groupId>ch.qos.logback</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>logback-classic</artifactId>
                        <groupId>ch.qos.logback</groupId>
                    </exclusion>    
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-log4j</artifactId>
                <version>1.3.2.RELEASE</version>
    </dependency>
    
  • 相关阅读:
    Electron应用使用electron-builder配合electron-updater实现自动更新(windows + mac)
    Electron 桌面应用打包(npm run build)简述(windows + mac)
    Electron 打包Mac安装包代码签名问题解决方案Could not get code signature for running application
    安装SQL Server 2012过程中出现“启用windows功能NetFx3时出错”(错误原因、详细分析及解决方法)以及在Windows Server2012上安装.NET Framework 3.5的详细分析及安装过程
    SQL Server 2012 Enterprise Edition安装过程详解(包含每一步设置的含义)
    Wmic获取Windows硬件资源信息
    基于Mint UI和MUI开发VUE项目一之环境搭建和首页的实现
    GitHub常用命令及使用
    webpack安装,常见问题和基本插件使用
    vue,react,angular三大web前端流行框架简单对比
  • 原文地址:https://www.cnblogs.com/wigginess/p/13938949.html
Copyright © 2011-2022 走看看