logback配置及使用

maven配置

<properties>

<logback.version>1.2.3</logback.version>

<slf4j.api.version>1.7.5</slf4j.api.version>

<junit.version>4.12</junit.version>

</properties>


<dependencies>

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-api</artifactId>

<version>${slf4j.api.version}</version>

</dependency>

<dependency>

<groupId>ch.qos.logback</groupId>

<artifactId>logback-classic</artifactId>

<version>${logback.version}</version>

</dependency>

<dependency>

<groupId>ch.qos.logback</groupId>

<artifactId>logback-core</artifactId>

<version>${logback.version}</version>

</dependency>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>${junit.version}</version>

<scope>test</scope>

</dependency>


</dependencies>


logback.xml配置

<?xmlversion="1.0"encoding="UTF-8"?>


<!-- debug=false啓動時不打印logback信息 -->

<!-- scanPeriod爲動態加載配置文件的時間間隔 -->

<configurationscan="true"scanPeriod="180 seconds">


<!-- 日誌級別,按日誌輸出內容多少排序 -->

<!-- TRACE > DEBUG > INFO > WARN > ERROR -->



<!-- ===============靜態變量=============== -->

<!-- 工程名 -->

<propertyname="project.name"value="TestWithMaven"/>


<!-- 日誌文件輸出目錄 -->

<propertyname="log.base.path"value="logs"/>

<!-- 日誌文件附加策略 -->

<propertyname="log.appender.append"value="true"/>

<!-- 多JVM往同一文件寫策略 -->

<propertyname="log.appender.prudent"value="true"/>

<!-- 日誌文件字符集 -->

<propertyname="log.charset"value="UTF-8"/>

<!-- 日誌格式:2017-09-18 17:07:44.108 [ERROR] [main] log.b.LogB:15 - Error: 

debuging in class Log B -->

<propertyname="log.format"

value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] %logger{200}.%method:%line - %msg %n"/>


<!-- 滾動日誌每個文件大小 -->

<propertyname="rolling.log.max.file.size"value="100KB"/>

<!-- 滾動日誌保留天數 -->

<propertyname="rolling.log.max.history"value="90"/>

<!-- 滾動日誌總大小 -->

<propertyname="rolling.log.total.size.cap"value="20GB"/>

<!-- 滾動日誌名稱 -->

<propertyname="rolling.log.file.name"value="${log.base.path}/${project.name}-rolling"/>


<!-- 窗口滾動日誌文件起始值 -->

<propertyname="window.rolling.log.min.index"value="1"/>

<!-- 窗口滾動日誌文件起始值 -->

<propertyname="window.rolling.log.max.index"value="10"/>

<!-- 窗口滾動日誌每個文件大小 -->

<propertyname="window.rolling.log.max.file.size"value="100KB"/>

<!-- 窗口滾動日誌名稱 -->

<propertyname="window.rolling.log.file.name"value="${log.base.path}/${project.name}-window"/>




<!-- ===============Appender配置=============== -->

<!-- 控制檯輸出 -->

<appendername="STDOUT"class="ch.qos.logback.core.ConsoleAppender">

<target>System.out</target>

<encoder>

<pattern>${log.format}</pattern>

<charset>${log.charset}</charset>

</encoder>

</appender>


<!-- 文件輸出 -->

<!-- <appender name="FILE" class="ch.qos.logback.core.FileAppender">

<append>${log.appender.append}</append>

<prudent>${log.appender.prudent}</prudent>

<file>${log.base.path}/${project.name}-file.log</file>

<encoder>

<pattern>${log.format}</pattern>

<charset>${log.charset}</charset>

</encoder>

</appender> -->


<!-- 基於時間的回滾文件輸出 -->

<appendername="ROLLING"

class="ch.qos.logback.core.rolling.RollingFileAppender">

<append>${log.appender.append}</append>

<prudent>${log.appender.prudent}</prudent>

<File>${rolling.log.file.name}.log</File>

<rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

<fileNamePattern>${rolling.log.file.name}-%d{yyyy-MM-dd}.log

</fileNamePattern>

<maxFileSize>${rolling.log.max.file.size}</maxFileSize>

<maxHistory>${rolling.log.max.history}</maxHistory>

<totalSizeCap>${rolling.log.total.size.cap}</totalSizeCap>

</rollingPolicy>

<!-- 必須指定,否則不會往文件輸出內容 -->

<encoder>

<pattern>${log.format}</pattern>

<charset>${log.charset}</charset>

</encoder>

</appender>


<!-- 基於窗口的回滾文件輸出 -->

<appendername="WINDOW"

class="ch.qos.logback.core.rolling.RollingFileAppender">

<append>${log.appender.append}</append>

<File>${window.rolling.log.file.name}.log</File>

<rollingPolicyclass="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">

<fileNamePattern>${window.rolling.log.file.name}-%i.log.zip</fileNamePattern>

<minIndex>${window.rolling.log.min.index}</minIndex>

<maxIndex>${window.rolling.log.max.index}</maxIndex>

</rollingPolicy>

<triggeringPolicy

class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">

<maxFileSize>${window.rolling.log.max.file.size}</maxFileSize>

</triggeringPolicy>

<!-- 必須指定,否則不會往文件輸出內容 -->

<encoder>

<pattern>${log.format}</pattern>

<charset>${log.charset}</charset>

</encoder>

</appender>



<!-- ===============Logger配置=============== -->

<!-- 所有logger的始祖是ROOT,默認會繼承ROOT的配置,因此在其他logger中的日誌會打印兩次。 解決:logger的additivity屬性設置爲false -->

<loggername="log.a"additivity="false">

<levelvalue="TRACE"/>

<appender-refref="STDOUT"/>

</logger>

<loggername="log.b"additivity="false">

<levelvalue="DEBUG"/>

<appender-refref="STDOUT"/>

<appender-refref="ROLLING"/>

</logger>

<loggername="log.c"additivity="false">

<levelvalue="DEBUG"/>

<appender-refref="WINDOW"/>

</logger>


<rootlevel="DEBUG">

<appender-refref="STDOUT"/>

<appender-refref="WINDOW"/>

</root>


</configuration> 



代碼

package log;


import org.slf4j.Logger;

import org.slf4j.LoggerFactory;


import log.a.LogA;

import log.b.LogB;

import log.c.LogC;


public class LogMain {

  private staticfinal Logger log = LoggerFactory.getLogger(LogMain.class);


  public staticvoid main(String[] args) {


    LogA a = new LogA();

    LogB b = new LogB();

    LogC c = new LogC();


    //TRACE < DEBUG < INFO < WARN < ERROR

    log.trace("Main trace start");

    log.debug("Main debug start");

    log.info("Main info start");

    log.warn("Main warn start");

    log.error("Main error start");


    a.logWithA();

    b.logWithB();

    c.logWithC();

  }

}


-------------------------------------------------------------------------------------------------------------


package log.a;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class LogA {
  private static final Logger log = LoggerFactory.getLogger(LogA.class);


  public void logWithA() {
    String wordI = "infoing in class Log A 中國";
    String wordD = "debuging in class Log A 中國";


    log.trace("Trace: {}", wordI);
    log.debug("Debug: {}", wordD);
    log.info("Info: {}", wordI);
  }
}


-------------------------------------------------------------------------------------------------------------


package log.b;


import org.slf4j.Logger;

import org.slf4j.LoggerFactory;


public class LogB {

  private staticfinal Logger log = LoggerFactory.getLogger(LogB.class);


  public void logWithB() {

    String wordI ="infoing in class Log B 中國";

    String wordD ="debuging in class Log B 中國";


    log.debug("Debug: {}",wordD);

    log.info("Info: {}",wordI);

    log.error("Error: {}",wordD);

  }

}


-------------------------------------------------------------------------------------------------------------


package log.c;


import org.slf4j.Logger;

import org.slf4j.LoggerFactory;


public class LogC {

  private staticfinal Logger log = LoggerFactory.getLogger(LogC.class);


  public void logWithC() {

    String wordI ="infoing in class Log C 中國";

    String wordD ="debuging in class Log C 中國";


    log.debug("Debug: {}",wordD);

    log.info("Info: {}",wordI);

    log.warn("Warn: {}",wordD);

  }

}





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