SpringBoot 下日志的使用

注:SpringBoot版本 2.0.3.RELEASE,项目管理工具maven

SpringBoot 默认使用logback日志,默认日志级别info

pom 依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
</dependency>

spring-boot-starter-logging依赖已经被包含spring-boot-starter依赖中,而spring-boot-starter依赖又被包含在每个以“spring-boot-starter”开头的依赖中。所以已经配了其它以“spring-boot-starter”开头的依赖,则不需要配上面的pom依赖。

application.properties
# 指定日志文件路径名(包含日志文件名)
logging.file
# 指定日志文件路径名(不包含日志文件名)
logging.path
# 日志八级别,ALL、TRACE(链路)、DEBUG(调试)、INFO(信息)、WARN(警告)、ERROR(异常)、FATAL(致命)、OFF
logging.level
# 默认加载一些名字的配置,其中包含logback-spring.xml、log4j2-spring.xml等;如果名字自定义,可以通过该属性指定日志xml路径(用于更复杂、具体的日志要求);
logging.config
# 设置一个日志文件存储上限
logging.file.max-size
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
    scan: 当此属性设置为true时,配置文件如果发生改变将会被重新加载 (默认值为true).
    scanPeriod: scan为true的前提下,用于设置监测配置文件是否有修改的时间间隔 (默认的时间间隔为1分钟,默认单位为毫秒).
    debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态 (默认值为false).
 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <!--
        定义变量
            name: 变量名
            value: 值
     -->
    <property name="logPath" value="E:\\logs" />

    <!-- 上下文的名字 (默认default) -->
    <contextName>myContextName</contextName>

    <!--
        输出到控制台的appender
            name: appender的名字
            class: 所要使用的类
     -->
    <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
        <!--
            encoder
                class: 默认使用ch.qos.logback.classic.encoder.PatternLayoutEncoder
         -->
        <encoder>
            <!-- 日志格式 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{5}[%file:%line] %msg%n</pattern>
            <!-- 字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--
        输出到日志文件的appender(能够滚动的,滚动就是指能够根据策略记录成多份日志文件,而不是一份庞大的日志文件).
            name: appender的名字
            class: 所要使用的类
     -->
    <appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 日志文件是否追加日志信息(默认true) -->
        <append>true</append>

        <!--
            滚动策略
                class: TimeBasedRollingPolicy 根据时间来分;
                       FixedWindowRollingPolicy 根据窗口数量来分;
                       SizeAndTimeBasedRollingPolicy 根据日志文件大小和时间来分.
         -->
        <!--<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
            <!--&lt;!&ndash; 文件路径名. %d{yyyy-MM-dd}表示时间格式,这种格式表示按天分;%d{yyyy-MM}这种格式表示按月分.以此类推. &ndash;&gt;-->
            <!--<fileNamePattern>E:\\logs\logFile.%d{yyyy-MM-dd}.zip</fileNamePattern>-->
            <!--&lt;!&ndash; 日志文件保存时间. 若按天分,这里就表示30天;按月分,这里就表示30个月. &ndash;&gt;-->
            <!--<maxHistory>30</maxHistory>-->
        <!--</rollingPolicy>-->

        <!--
            FixedWindowRollingPolicy 策略
                需要 <file>、<triggeringPolicy>节点
                窗口数不够的话会覆盖最新的窗口......
         -->
        <!--<file>${logPath}\test.log</file>-->
        <!--<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">-->
            <!--&lt;!&ndash; 文件路径名.必须包含%i,否则报错  &ndash;&gt;-->
            <!--<fileNamePattern>${logPath}\logFile.%i.log.zip</fileNamePattern>-->
            <!--&lt;!&ndash; 起始 &ndash;&gt;-->
            <!--<minIndex>2</minIndex>-->
            <!--&lt;!&ndash; 截止 &ndash;&gt;-->
            <!--<maxIndex>3</maxIndex>-->
        <!--</rollingPolicy>-->
        <!--<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">-->
            <!--&lt;!&ndash; 设置日志文件上限(这里的大小是文件打包后的大小) &ndash;&gt;-->
            <!--<maxFileSize>1KB</maxFileSize>-->
        <!--</triggeringPolicy>-->

        <!--
            SizeAndTimeBasedRollingPolicy 策略
         -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${logPath}\logFile.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <maxFileSize>1KB</maxFileSize>
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{5}[%file:%line] %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>

        <!--
            过滤器,用于过滤一些不需要的日志,可以配置多个过滤器.
                LevelFilter: 与过滤的日志级别相等的日志才会过滤. 本例中只有warn级别过滤.(=)
                ThresholdFilter: 大于等于过滤的日志级别的日志才会过滤. 本例中只有warn级别以上的过滤.(>=)
                EvaluatorFilter: 复杂的过滤条件可以使用这个,使用<evaluator>节点替换<level>节点,使用提供的鉴别器表达式实现复杂过滤
          -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!-- 过滤的日志级别 -->
            <level>INFO</level>
            <!--
                符合过滤条件后能做的操作用三种,分别是ACCEPT(自己处理不会传递给后面的过滤器)、NEUTRAL(处理好交给后面的过滤器)、DENY(不处理也不交给后面的过滤器)
                注: ThresholdFilter不具备下面两个节点,匹配直接NEUTRAL.
             -->
            <!--<onMatch>ACCEPT</onMatch>-->
            <!--<onMismatch>DENY</onMismatch>-->
        </filter>

        <!-- prudent: 如果是true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低(默认是 false) -->
        <!--<prudent></prudent>-->
    </appender>

    <!--
        logger
            level: 用来设置打印级别,未设置则继承上级
            name: 该logger负责的区域
            additivity: 是否向上级传递收集到的日志(默认false)
     -->
    <logger level="INFO" name="com.sen.ultimate.UltimateApplicationTests" additivity="false">
        <!-- 使用的appender,表示该logger自己会进行日志处理操作. -->
        <appender-ref ref="RollingFile"/>
    </logger>

    <!--
        rootLogger (顶级的logger)
            level: 日志级别(默认是DEBUG)
     -->
    <root level="INFO">
        <appender-ref ref="Console" />
        <appender-ref ref="RollingFile" />
    </root>
</configuration>

* log4j2

pom依赖调整
<!-- 
    排除starter 依赖自带的logback 
    注:在第一个starter 依赖中加上这段,否则无效 
 -->
<exclusions>
    <exclusion>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-logging</artifactId>
    </exclusion>
</exclusions>
<!-- 引入log4j2依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
log4j2-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
    status: 显示log4j2内部日志打印级别
    monitorInterval: 设置监测配置文件修改的间隔时间,默认单位是s,最短间隔为5s
-->
<configuration status="warn" monitorInterval="30">
    <properties>
        <property name="logPath">E:\\logs</property>
    </properties>

    <appenders>

        <!--
            name: 标识
            target: SYSTEM_OUT 或 SYSTEM_ERR(用于输出异常)
         -->
        <console name="Console" target="SYSTEM_OUT">
            <!--
                符合过滤条件后能做的操作用三种,分别是ACCEPT(自己处理不会传递给后面的过滤器)、NEUTRAL(处理好交给后面的过滤器)、DENY(不处理也不交给后面的过滤器)
                ThresholdFilter: 大于等于过滤的日志级别的日志才会过滤. (>=)
                level: 过滤的日志级别
                onMatch: 匹配成功后的操作
                onMismatch: 匹配失败后的操作
             -->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <!-- 日志输出的格式 -->
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{5}[%file:%line] %msg%n"/>
        </console>

        <!--
            name: 标识
            fileName: 日志文件存储路径
            append: 日志文件是否追加日志信息(默认true)
        -->
        <File name="File" fileName="${logPath}/FileAppender/file-output.log" append="false">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{5}[%file:%line] %msg%n"/>
        </File>

        <!--
            name: 标识
            fileName: 日志文件存储路径和文件名
            filePattern: Rolling的时候文件转移路径
         -->
        <RollingFile name="RollingFile" fileName="${logPath}/output.log"
                     filePattern="${logPath}/$${date:yyyy-MM-dd}/output-%d{yyyy-MM-dd HH}.%i.log.zip">
            <Filters>
                <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
                <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{5}[%file:%line] %msg%n"/>
            <Policies>
                <!--
                    interval: 多长时间生成一个新日志文件(Rolling的间隔),时间单位根据filePattern的时间精度来决定
                    modulate: 是否调整时间,以0为起始,interval作为偏移
                 -->
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <!--
                    size: 设置日志文件容量
                 -->
                <SizeBasedTriggeringPolicy size="9MB"/>
            </Policies>
            <!-- 文件生成个数(默认7个) -->
            <DefaultRolloverStrategy max="50"/>
        </RollingFile>
    </appenders>

    <loggers>
        <root level="debug">
            <appender-ref ref="Console"/>
            <appender-ref ref="File"/>
            <appender-ref ref="RollingFile"/>
        </root>
    </loggers>

</configuration>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值