SpringBoot日志管理(三)

3.SpringBoot日志(日志框架,日志配置)

1. 日志框架

 


左边选择一个门面,(抽象层). 右边选择一个实现 .

日志门面:我们选择左边SLF4j,因为JCL太老了, jboss-logging不适合

日志实现:Logback最新的和SLF4j和SLF4j适配, log4j2适配不好

springboot:底层使用的spring框架,spring框架默认使用jcl

所以springboot使用slf4j和logback!

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");
  }
} 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用法

每一个日志实现框架,都有自己的配置文件. 配置文件使用slf4j以后,配置文件还是做成日志实现框架的配置文件;

2.遗留问题

统一日志记录,(Spring(commons-logging),Hibernate(joss-logging))

  1. 现将系统中其他日志框架先排除出去;

  2. 用中间包来替换原有的日志框架;

  3. 我们导入slf4j其他的实现

3.使用日志

 


Logger logger = LoggerFactory.getLogger(getClass());
​
    // 日志的级别从低到高,如下排列
    @Test
    public void testLog() {
        logger.trace("这个trace日志");
        logger.debug("这个debug日志");
        logger.info("这个info日志");
        logger.warn("这个warn日志");
        logger.error("这个error日志");
​
    }
​Logger logger = LoggerFactory.getLogger(getClass());
​
    // 日志的级别从低到高,如下排列
    @Test
    public void testLog() {
        logger.trace("这个trace日志");
        logger.debug("这个debug日志");
        logger.info("这个info日志");
        logger.warn("这个warn日志");
        logger.error("这个error日志");
​
    }
​

可以在配置文件里配置级别:(如下图,这样我们的输出级别就是debug级别了)


logging.level=debug
#指定目录,与logging.file冲突
#当前磁盘的根路径下创建spring文件夹和里面的log文件夹,使用日志spring.log默认文件
logging.path=/spring/log
#不指定路径,就在当前项目下生产springboot.log日志
#可以指定完整的路径:
logging.file=springboot.log
# 在控制台输出的日志的格式
logging.pattern.console=logging.level=debug
#指定目录,与logging.file冲突
#当前磁盘的根路径下创建spring文件夹和里面的log文件夹,使用日志spring.log默认文件
logging.path=/spring/log
#不指定路径,就在当前项目下生产springboot.log日志
#可以指定完整的路径:
logging.file=springboot.log
# 在控制台输出的日志的格式
logging.pattern.console=

指定配置

给类路径下 ,根据规定放一下的配置文件

Logging SystemCustomization
Logbacklogback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy
Log4j2log4j2-spring.xml or log4j2.xml
JDK (Java Util Logging)logging.properties

推荐使用带扩展名的logback-spring.xml, 因为日志框架就不会被直接加载了,这样它由spirngboot加载能用到,springProfile标签,

 

生产使用的模板配置
 

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <jmxConfigurator/>

    <springProperty scope="context" name="springAppName" source="spring.application.name"/>

    <property name="LOG_PATH" value="/data/logfiles"/>

    <property name="FILE_LOG_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:-} --- [%15.15t] %-40.40logger{39} : %m%n"
    />
    <property name="CONSOLE_LOG_PATTERN"
              value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) {faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"
    />

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH:-}/${springAppName}/${springAppName}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH:-}/${springAppName}/${springAppName}-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 每个日志文件的大小 -->
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- 保留多少天的日志 -->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <!--错误日志的位置-->
    <appender name="ERROR-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH:-}/${springAppName}/error/${springAppName}-error.log</file>
        <param name="append" value="true"/>
        <param name="threshold" value="WARN"/>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH:-}/${springAppName}/error/${springAppName}-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 每个日志文件的大小 -->
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- 保留多少天的日志 -->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <!--第三方的日志-->
    <appender name="THIRD-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH:-}/${springAppName}/third/${springAppName}-third.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH:-}/${springAppName}/third/${springAppName}-third-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 每个日志文件的大小 -->
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- 保留多少天的日志 -->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <!--remote的日志-->
    <appender name="REMOTE-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH:-}/${springAppName}/remote/${springAppName}-remote.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH:-}/${springAppName}/remote/${springAppName}-remote-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 每个日志文件的大小 -->
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- 保留多少天的日志 -->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <!--流程的日志-->
    <appender name="PROCESS-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH:-}/${springAppName}/process/${springAppName}-process.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH:-}/${springAppName}/process/${springAppName}-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 每个日志文件的大小 -->
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- 保留多少天的日志 -->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!--  三方 -->
    <logger name="THIRD" additivity="false">
        <level value="${log_level}" />
        <appender-ref ref="THIRD-APPENDER" />
        <appender-ref ref="ERROR-APPENDER" />
        <appender-ref ref="CONSOLE"/>
    </logger>

    <!-- 远程 -->
    <logger name="REMOTE" additivity="false">
        <level value="${log_level}" />
        <appender-ref ref="REMOTE-APPENDER" />
        <appender-ref ref="ERROR-APPENDER" />
        <appender-ref ref="CONSOLE"/>
    </logger>

    <!-- 流程 -->
    <logger name="PROCESS" additivity="false">
        <level value="${log_level}" />
        <appender-ref ref="PROCESS-APPENDER" />
        <appender-ref ref="ERROR-APPENDER" />
        <appender-ref ref="CONSOLE"/>
    </logger>

    <!-- 错误 -->
    <logger name="ERROR" additivity="false">
        <level value="WARN" />
        <appender-ref ref="ERROR-APPENDER" />
        <appender-ref ref="CONSOLE"/>
    </logger>


    <logger name="druid.sql.Statement" level="INFO" additivity="false">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </logger>
    <logger name="java.sql.PreparedStatement" level="DEBUG" additivity="false">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </logger>
    <logger name="com.zjrc" level="DEBUG" additivity="false">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </logger>
    <logger name="org.springframework" level="INFO" additivity="false">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </logger>
    <logger name="org.springframework.cloud.sleuth.instrument.web.client.feign" level="INFO" additivity="false">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </logger>
    <root level="INFO" additivity="false">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>



</configuration>

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值