Spring boot-Logback

1、logback简单介绍
  开源,是Log4j的改良版本
  Springboot提供了一套日志系统,lockback是最优选择
 2、结构
   logback被分为三个组件:core、classic、access
   其中,core提供了Logback的核心功能,另外两个组件在其基础之上;
   classic实现了Slf4j的Api,当需要配合Slf4j使用时,需要将classic引入进来;
   access为了继承Servlet环境而准备,可提供Http_accrss日志接口
  3、配置
  在pom.xml文件中加入:
   <!--logback依赖导入-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        即可

    先写一个测试类:

    package com.dairy.sell;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;

import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
/*
Logback测试
 */

@RunWith(SpringRunner.class)
@SpringBootTest
//@Slf4j

public class LogTest {
	//添加@Slf4j注释后这里就不需要使用了
  private final Logger logger= LoggerFactory.getLogger(LogTest.class);

    @Test
    public void test1() {
        String name = "dairy";
        String password = "123";
        log.debug("debug");
        log.info("name:{},password:{}", name, password);
        log.error("error");
        log.warn("warm");

    }
}
其输入结果可以在控制台上查看,但是这样的方式显然太麻烦,需要添加每个需要log日志的类。所以放在注释的内容。
4、方式一:在SpringBoot的配置文件加入Logback的相关配置,如下:

// #    日志变短
logging:
  pattern:
  // 日志输入的格式
    console: "%d -%msg%n"
// #    log文件存放的位置

  path: /var/log/tomcat/sell
// #  log文件
  file: /var/log/tomcat/sell/dairui.log
  // 指定级别
  level: debug
    // 指定log的类
   level:
     com.dairy.sell.LogTest: debug
     方式二:在根目录下添加logback-spring.xml文件:
     <?xml version="1.0" encoding="utf-8" ?>
<configuration>
  // logback的核心类
    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
       // 设置输入的格式可点进去看源码
       //  defaultConverterMap.putAll(Parser.DEFAULT_COMPOSITE_CONVERTER_MAP);
       //  defaultConverterMap.put("d", DateConverter.class.getName());
       //  defaultConverterMap.put("date", DateConverter.class.getName());
       //  defaultConverterMap.put("r", RelativeTimeConverter.class.getName());
       //  defaultConverterMap.put("relative", RelativeTimeConverter.class.getName());
       //  defaultConverterMap.put("level", LevelConverter.class.getName());
       //  defaultConverterMap.put("le", LevelConverter.class.getName());
       //  defaultConverterMap.put("p", LevelConverter.class.getName());
       //  defaultConverterMap.put("t", ThreadConverter.class.getName());
       //  defaultConverterMap.put("thread", ThreadConverter.class.getName());
    // 对输出命名、格式、颜色等设置
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>
                %d -%msg%n
            </pattern>
        </layout>


    </appender>
    // 设置日志每天输出,并放到文件夹中
    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
    // 设置日志等级 默认级别是debug
        <filter class="ch.qos.logback.classic.filter.LevelFilter">

            <Level>ERROR</Level>
            // 静止其他的,比它等级高的
            <onMatch>DENY</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
        <encoder>
            <pattern>

                %msg%n
            </pattern>
        </encoder>
        // 文件位置 一定要绝对位置
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>/var/log/tomcat/sell/info.%d.log</fileNamePattern>

        </rollingPolicy>

    </appender>
    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <Level>ERROR</Level>
        </filter>
        <encoder>
            <pattern>

                %msg%n
            </pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>/var/log/tomcat/sell/error.%d.log</fileNamePattern>

        </rollingPolicy>

    </appender>
    <root level="info">
        <appender-ref ref="consoleLog"/>
        <appender-ref ref="fileErrorLog"/>
        <appender-ref ref="fileInfoLog"/>

    </root>

</configuration>

第二个Logback配置文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="/home" />  
    <!-- 控制台输出 -->   
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 
             <!--格式化输出,%d:日期;%thread:线程名;%-5level:级别,从左显示5个字符宽度;%msg:日志消息;%n:换行符--> 
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>   
        </encoder>
    </appender>
    <!-- 按照每天生成日志文件 -->   
    <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">   
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern> 
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>   
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 
            <!--格式化输出,%d:日期;%thread:线程名;%-----------------5level:级别,从左显示5个字符宽度;%msg:日志消息;%n:换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>   
        </encoder> 
        <!--日志文件最大的大小-->
       <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
         <MaxFileSize>10MB</MaxFileSize>
       </triggeringPolicy>
    </appender> 
   <!-- show parameters for hibernate sql 专为 Hibernate 定制 --> 
    <logger name="org.hibernate.type.descriptor.sql.BasicBinder"  level="TRACE" />  
    <logger name="org.hibernate.type.descriptor.sql.BasicExtractor"  level="DEBUG" />  
    <logger name="org.hibernate.SQL" level="DEBUG" />  
    <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
    <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />  
    
    <!--myibatis log configure--> 
    <logger name="com.apache.ibatis" level="TRACE"/>
    <logger name="java.sql.Connection" level="DEBUG"/>
    <logger name="java.sql.Statement" level="DEBUG"/>
    <logger name="java.sql.PreparedStatement" level="DEBUG"/>
    
    <!-- 日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root> 
     <!--日志异步到数据库 -->  
    <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
        <!--日志异步到数据库 --> 
        <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
           <!--连接池 --> 
           <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
              <driverClass>com.mysql.jdbc.Driver</driverClass>
              <url>jdbc:mysql://127.0.0.1:3306/databaseName</url>
              <user>root</user>
              <password>root</password>
            </dataSource>
        </connectionSource>
  </appender>
</configuration>

5、测试类

package com.dairy.sell;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;

import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
/*
Logback测试
 */

@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j

public class LogTest {
//    private final Logger logger= LoggerFactory.getLogger(LogTest.class);

    @Test
    public void test1() {
        String name = "dairy";
        String password = "123";
        log.debug("debug");
        log.info("name:{},password:{}", name, password);
        log.error("error");
        log.warn("warm");

    }
}
输出结果:
2018-08-25 09:22:25.149---------- [main] INFO  com.dairy.sell.LogTest - Started LogTest in 4.305 seconds (JVM running for 6.237)
2018-08-25 09:22:25.299---------- [main] INFO  com.dairy.sell.LogTest - name:dairy,password:123
2018-08-25 09:22:25.299---------- [main] ERROR com.dairy.sell.LogTest - error
2018-08-25 09:22:25.300---------- [main] WARN  com.dairy.sell.LogTest - warma

猜你喜欢

转载自blog.csdn.net/sinat_32856935/article/details/82048159
今日推荐