1. 程式人生 > 程式設計 >Logback日誌基礎及自定義配置程式碼例項

Logback日誌基礎及自定義配置程式碼例項

Logback日誌基礎配置

logback日誌配置有很多介紹,但是有幾個非常基礎的,容易忽略的。下面是最簡單的一個配置,注意加粗的描述

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true" scanPeriod="30 seconds">

  <!--log.path定義的是區域性變數,./logs指定的是相對路徑下的資料夾logs-->
  <property name="log.path" value="./logs"/>

  <appender name="ROLLING-FILE-OUT" class="ch.qos.logback.core.rolling.RollingFileAppender">

    <!--這裡的檔名是不能使用正則表示式,只能是定死的名字,實現了很久-->
    <file>${log.path}/errorlog.log</file>

    <!-- 日誌輸出格式:%d表示日期時間,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度
       %logger{50} 表示logger名字最長50個字元,否則按照句點分割。 %msg:日誌訊息,%n是換行符 -->
    <encoder>
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
    </encoder>

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- 每天日誌歸檔路徑以及格式,可以不使用log字尾,%i:當檔案大小超過maxFileSize時,按照i進行檔案滾動,i從0開始滾動 -->
      <FileNamePattern>${log.pat h}/errorlog.%d{yyyyMMdd}.log.%i.gz</FileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <maxFileSize>4096MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
      <!--日誌檔案保留天數-->
      <maxHistory>365</maxHistory>
    </rollingPolicy>
  </appender>

  <!-- 日誌級別-->
  <root level="debug"> 
    <appender-ref ref="ROLLING-FILE-OUT"/>
  </root>

</configuration>

在規範裡,行結束符往往採用Linux結束符(\n),而不是上面那樣的 %n。 這個\n ,使用txt文件檢視,並沒有換行

使用%的正則還有許許多多,比如如下:

<property name="CONSOLE_LOG_PATTERN" value="%date{yyyy-MM-dd HH:mm:ss} | %highlight(%-5level) | %yellow(%thread) | %green(%logger) | %msg%n"/>

再比如:%contextName 作用是 顯示主機名

Logback日誌自定義配置

即便如此,還是有很多想要的東西顯示不了,這時就可自定義配置。比如我希望每條日誌有個uuid型別的id,希望每條日誌能列印ip地址

一、新建兩個配置類,重寫convert方法

package cn.jiashubing.config.logback;

import ch.qos.logback.classic.pattern.ClassicConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;
import java.util.UUID;

public class LogIdConfig extends ClassicConverter {

  @Override
  public String convert(ILoggingEvent event) {
    return UUID.randomUUID().toString().replaceAll("-","");
  }
}


package cn.jiashubing.config.logback;

import ch.qos.logback.classic.pattern.ClassicConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;
import java.net.InetAddress;
import java.net.UnknownHostException;

public class IPLogConfig extends ClassicConverter {

  @Override
  public String convert(ILoggingEvent event) {
    try {
      return InetAddress.getLocalHost().getHostAddress();
    } catch (UnknownHostException e) {
      e.printStackTrace();
    }
    return null;
  }
}

二、配置日誌檔案

<property name="log.path" value="./logs"/>
<conversionRule conversionWord="ip" converterClass="cn.jiashubing.config.logback.IPLogConfig" />
<conversionRule conversionWord="logid" converterClass="cn.jiashubing.config.logback.LogIdConfig" />

<appender name="ROLLING-FILE-OUT" class="ch.qos.logback.core.rolling.RollingFileAppender">   
  <file>${log.path}/errorlog.log</file>   
  <encoder>     
    <pattern>[loglevel=%level] [timestamp=%d{yyyy-MM-dd HH:mm:ss}] [logid=%logid] [ip=%ip] [cmd=%msg] \n</pattern>   
  </encoder>
  ...
</appender>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。