SpringBoot-引入日志功能

详细教程

说明

JAVA的日志框架有很多种,常见的几种比如Log4j、log4j2、logback、jdk-logging而前三种是出自同一人,最后一种有jdk1.4开始提供的自带的日志库实现。
目前用得比较广泛的统一日志规范接口有Slf4j和commons-logging.
这篇博客主要是记录logback和slf4j的配合使用

使用步骤

引入依赖

修改pom.xml文件

      <dependency>
            <groupId>org.slf4jgroupId>
            <artifactId>slf4j-apiartifactId>
        dependency>
        <dependency>
            <groupId>ch.qos.logbackgroupId>
            <artifactId>logback-classicartifactId>
        dependency>
        <dependency>
            <groupId>ch.qos.logbackgroupId>
            <artifactId>logback-coreartifactId>
        dependency>

创建配置文件src

在main->resources下创建logback.xml文件作为logback的配置文件
如果是在text中
就在test->resources下创建logback-test.xml文件作为logback的配置文件

基础配置

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%nPattern>
        layout>
    appender>

    <logger name="com.base22" level="TRACE"/>


    <root level="debug">
        <appender-ref ref="STDOUT" />
    root>
configuration>
高级配置




<configuration debug="false" scan="true" scanPeriod="30 seconds" packagingData="true">
    
    <contextName>myAppNamecontextName>
    
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern>
        encoder>
    appender>
    
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">  
        
        <file>./my_log.logfile>
        
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <FileNamePattern>./my_log%d{yyyyMMdd}.log.zipFileNamePattern>
            <maxHistory>30maxHistory>
        rollingPolicy>
       
        
        
        
        

        <encoder>
          <pattern>%d{HH:mm:ss.SSS}[%-5level][%thread]%logger{36} - %msg%npattern>
          
        encoder>
    appender>
    
    
    
    <logger name="com.yinz"  level="debug" additivity="false" >
        <appender-ref ref="FILE"/>
    logger>

    
    <root level="debug">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    root>
configuration>

在业务逻辑中使用

public class Application {
    private static final Logger logger = LoggerFactory.getLogger(Application.class);
    public static void main(String[] args) {
        logger.info("info");
        logger.error("error ");
        logger.debug("debug");
    }
}

详细讲解

logger,Appender,layout

日志打印级别

logger有日志打印级别,可以为logger指定它的日志打印级别。
如果不为一个logger指定打印级别,那么它会从它爸爸开始一直找到它祖宗(root logger)直到找到为止。
日志打印级别从低到高:
TRACE

获取logger

在logback中,每个logger都是一个单例,调用LoggerFactory.getLogger方法时,如果传入logger name相同 获取到的logger也是同一个实例

Appender

Appender在logback中是用于确定打印位置的,一个logger可以绑定多个Appender。
默认情况下logger打印一条日志,则会打印到logger的appender以及logger的父亲和祖先的appender中,就想撸串一样一路到底。
但是如果logger设置了additivity=false那么撸串也就撸到这个地方为止,不会再往上撸了。

Layout

layout是用来设置日志信息展示格式的。
比如说

%-4relative [%thread] %-5level %logger{32} - %msg%n

然后打印出来的格式效果是:

176 [main] DEBUG manual.architecture.HelloWorld2 - Hello world.

上面这个格式的第一个字段代表从程序启动开始后经过的毫秒数,第二个字段代表打印出这条日志的线程名字,第三个字段代表日志信息的日志打印级别,第四个字段代表 logger name,第五个字段是日志信息,第六个字段仅仅是代表一个换行符。

参数化打印日志

在打印日志时往往会采用字符串拼接的方式打印

logger.debug("the message is " + msg + " from " + balabala);

这样的方式会额外消耗计算机性能

因此在打印时更加期望的是使用占位符的方式,以参数化的方式打印日志

logger.debug("the message {} is from {}", msg, balabala);

logback配置

lockback支持的配置方式有:

  • 编程式配置
  • xml格式
  • groovy格式

logback启动时,会自动寻找配置文件,查询顺序为:

  1. logback-test.xml
  2. logback.groovy
  3. logback.xml
  4. 查找实现Configuration接口的配置类
  5. 使用自带的BasicConfigurator并将日志输出到console

 
<configuration>

    
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
            pattern>
        encoder>
    appender>

    <root level="debug">
        
        <appender-ref ref="STDOUT" />
    root>
configuration>

变量替换

logback中支持用${varName} 来引用变量

<configuration>

  <property name="USER_HOME" value="/home/sebastien" />

  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>${USER_HOME}/myApp.logfile>
    <encoder>
      <pattern>%msg%npattern>
    encoder>
  appender>

  <root level="debug">
    <appender-ref ref="FILE" />
  root>
configuration>

其中

 

可以通过外部文件

  

或则classpath中的文件

      

变量的作用域可以通过scope指定

  

你可能感兴趣的:(SpringBoot)