SpringBoot--------日志配置(四)

 

https://i.xue.taobao.com/my/learning.htm?spm=a2174.7365761.0.0.oxhqUo

 

第3章 SpringBoot 日志配置

在市场上存在非常多的日志框架:

日志抽象层

日志实现

jboss-logging (不适合企业项目开发使用)

JCL(Jakarta Commons Logging) (2014年后不

再维护)

SLF4j(Simple Logging Facade for Java) (与 log4j

Logback 同一个人开发)

JUL (java.util.logging)(担心被抢市场,推出的)

Log4j (存在性能问题)

Logback (Log4j同一个人开发的新框架,做了重大

升级)

Log4j2 ( apache开发的很强大,借了名log4j的名, 但

当前很多框架未适配上)

Spring Boot 采用了 slf4j+logback 的组合形式,Spring Boot也提供对JUL、log4j2、Logback提供了默认配置

Spring官网参考文档:

https://docs.spring.io/spring-boot/docs/2.0.6.RELEASE/reference/htmlsingle/#boot-features-logging

 

3.1 默认日志配置

SpringBoot默认配置好了日志, 只要启动 Spring Boot 项目就会在控制台输出日志信息。

package com.mengxuegu.springboot;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBoot03LoggingApplicationTests {
      //日志记录器
      Logger logger = LoggerFactory.getLogger(getClass());
      @Test
      public void contextLoads() {
        //1. 以下日志级别,由低到高:trace < debug < info < warn < error
        //2. Spring Boot默认设定的是 info 级别日志,(日志默认级别也称为root级别)。
        //   可修改默认级别日志:logging.level.level=级别名
        //3. 可以进行调整日志级别,设定某个级别后,就只打印设定的这个级别及后面高级别的日志信息
        //   没有指定级别的就用SpringBoot默认规定的级别:root级别
        //4. 可修改指定包的日志级别:
        //   指定某个包下面的所有日志级别:logging.level.包名=级别名

        //跟踪运行信息 
        logger.trace("这是 trace 日志信息!");
        //调试信息 
        logger.debug("这是 debug 日志信息!");
        //自定义信息
        logger.info("这是 info 日志信息");
        //警告信息:如果运行结果是不预期的值,则可以进行警告 
        logger.warn("这是 warn 日志信息");
        //错误信息:出现异常捕获时
        logger.error("这是 error 日志信息");

    }
}

 

 

 

 

 

修改日志默认级别

3.2 修改日志默认配置

application.properties中修改日志默认配置

3.2.1 修改日志文件生成路径

 

logging.file

logging.path

示例

说明

(none)

(none)

 

只在控制台输出

指定文件名

(none)

springboot.log

输出到当前项目根路径下的springboot.log文件中

(none)

指定目录

/springboot/log

输出到当前项目所在磁盘根路径下的/springboot/log目录中的spring.log文件中

指定文件名

指定目录

 

当两个同事指定时,采用的是logging.file指定。

推荐使用logging.file设置即可,因为它可自定义文件名

3.2.2 修改日志输出的格式

3.3 分析日志底层实现

在web项目当中引用了 spring-boot-starter-web 依赖

总结:SpringBoot中默认日志启动器为 spring-boot-starter-logging ,默认采用的是 logback

日志框架

在 spring-boot-2.0.6.RELEASE.jar! \org\springframework\boot\logging\logback\base.xml 做了日志

的默认配置

日志文件采用方式为:滚动文件追加器

在下面类中会读取上面xml中配置的信息

spring-boot-2.0.6.RELEASE.jar!org.springframework.boot.logging.LoggingSystemProperties

如果spring boot的日志功能无法满足我们的需求(比如异步日志记录等),我们可以自已定义的日志配置文件。

 

3.4 自定义日志配置

3.4.1 自定义Logback日志配置

在类路径下,存放对应日志框架的自定义配置文件即可;SpringBoot就不会使用它默认的日志配置文件了。

 

Logging System

自定义日志配置文件名

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

在 resources 目录下创建 logback.xml , 文件内容如下,SpringBoot就会采用以下日志配置:

logback.xml :是直接就被日志框架加载了。

logback-spring.xml:配置项不会被日志框架直接加载,而是由SpringBoot 解析日志配置文件,进而可以使用

SpringBoot 的 Profile 特殊配置

 

3.4.2 使用 Profile 特殊配置

使用日志 Profille 特殊配置, 可根据不同的环境激活不同的日志配置

3.5 切换日志框架

将SpringBoot默认的 logback 切换为 log4j2 日志框架, 参考文档

log4j2.xml案例:

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
    <properties>
        <property name="logPath">log</property>
        <property name="logName">third-authen</property>
        <property name="errPath">log/error</property>
        <property name="errName">third-authen_error</property>
    </properties>
    <appenders>

        <!-- 日志级别  ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF -->
        <!-- ACCEPT(接受), DENY(拒绝) 或NEUTRAL(中立) -->
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>

        <RollingFile name="RollingLogFile" filename="${logPath}/${logName}.log"
                     filepattern="${logPath}/${logName}_%d{yyyy-MM-dd}_%i.log.gz">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="1024 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="20"/>
            <Filters>
                <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingFile>

        <RollingFile name="RollingErrFile" filename="${errPath}/${errName}.log"
                     filepattern="${logPath}/${errName}_%d{yyyy-MM-dd}_%i.log.gz">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="1024 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="20"/>
            <Filters>
                <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingFile>

    </appenders>
    <loggers>
        <root level="info">
            <appender-ref ref="RollingLogFile"/>
            <!-- <appender-ref ref="RollingNasFile" /> -->
            <appender-ref ref="RollingErrFile"/>
        </root>
    </loggers>
</configuration>

查看当前项目所依赖的其它项目

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章