logback 配置文件解讀

http://logback.qos.ch/access.html 


1 項目依賴 

<!--slf4j 日誌門面-->
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.30</version>
</dependency>
<!--logback 日誌實現-->
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
    <scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
    <scope>provided</scope>
</dependency>
@Slf4j
public class LogbackTest {
    @Test
    public void testQuick() {
        log.error("error...");
        log.warn("wring...");
        log.info("info...");
        log.debug("debug...");
        log.trace("trace...");
    }

    @Test
    public void testSplit() {
        for (int i = 0; i < 100000; i++) {
            log.error("error");
            log.warn("wring");
            log.info("info");
            log.debug("debug");
            log.trace("trace");
        }
    }

 


2 輸出到控制檯

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--配置集中管理屬性 ${name}-->
    <property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n"/>
    <!--控制檯日誌輸出的 appender-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!--控制輸出流對象(默認System.out)-->
        <target>System.err</target>
        <!--日誌消息格式配置-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>
    <!--root logger 配置-->
    <root level="ALL">
        <appender-ref ref="console"/>
    </root>
</configuration>
[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n
格式  
%-5level 日誌級別(5個字符 不足左對齊)
%d{yyyy-MM-dd HH:mm:ss.SSS} 日期
%c 全限定類名
%M method
%L 行號
%thread 線程名稱
%m或者%msg 信息
%n 換行


2 輸出到文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n"/>
    <!--定義日誌文件保存路徑屬性 Windows爲當前項目所在的磁盤跟路徑-->
    <property name="log_dir" value="/logs"/>
    <!--日誌文件輸出的 appender-->
    <appender name="file" class="ch.qos.logback.core.FileAppender">
        <!--日誌文件保存路徑-->
        <file>${log_dir}/logback.log</file>
        <!--日誌消息格式配置-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>
    <!--root logger 配置-->
    <root level="ALL">
        <appender-ref ref="file"/>
    </root>
</configuration>

 

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n"/>
    <property name="log_dir" value="/logs"/>
    <appender name="file" class="ch.qos.logback.core.FileAppender">
        <file>${log_dir}/logback.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
        <!--日誌級別過濾器-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!--日誌過濾規則-->
            <level>WARN</level>
            <!--匹配到就放行-->
            <onMatch>ACCEPT</onMatch>
            <!--沒有匹配到就攔截-->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <root level="ALL">
        <appender-ref ref="file"/>
    </root>
</configuration>


3 輸出格式爲html

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--定義日誌文件保存路徑屬性-->
    <property name="log_dir" value="/logs"/>
    <!--html 格式日誌文件輸出 appender-->
    <appender name="htmlFile" class="ch.qos.logback.core.FileAppender">
        <!--日誌文件保存路徑-->
        <file>${log_dir}/logback.html</file>
        <!--html 消息格式配置-->
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="ch.qos.logback.classic.html.HTMLLayout">
                <pattern>%-5level%d{yyyy-MM-dd HH:mm:ss.SSS}%c%M%L%thread%m</pattern>
            </layout>
        </encoder>
    </appender>
    <!--root logger 配置-->
    <root level="ALL">
        <appender-ref ref="htmlFile"/>
    </root>
</configuration>


4 輸出日誌進行拆分與壓縮

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n"/>
    <property name="log_dir" value="/logs"/>
    <!--日誌拆分和歸檔壓縮的 appender 對象-->
    <appender name="rollFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日誌文件保存路徑-->
        <file>${log_dir}/roll_logback.log</file>
        <!--日誌消息格式配置-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
        <!--指定拆分規則-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--指定時間拆分一次,如果在指定時間內文件超過了設置的大小,也要拆分-->
            <!--按照時間和壓縮格式聲明拆分的文件名 yyyy-MM-dd(一天一拆) yyyy-MM-dd-HH-mm-ss(一秒一拆) -->
            <fileNamePattern>${log_dir}/rolling.%d{yyyy-MM-dd}.log%i.gz</fileNamePattern>
            <!--按照文件大小拆分-->
            <maxFileSize>1MB</maxFileSize>
        </rollingPolicy>
    </appender>
    <root level="ALL">
        <appender-ref ref="rollFile"/>
    </root>
</configuration>


5 異步日誌

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n"/>
    <property name="log_dir" value="/logs"/>
    <appender name="file" class="ch.qos.logback.core.FileAppender">
        <file>${log_dir}/logback.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>
    <!--異步日誌-->
    <appender name="async" class="ch.qos.logback.classic.AsyncAppender">
        <!--指定某個具體的 appender-->
        <appender-ref ref="file"/>
    </appender>
    <root level="ALL">
        <appender-ref ref="file"/>
    </root>
</configuration>
//ch.qos.logback.core.AsyncAppenderBase
public class AsyncAppenderBase<E> extends UnsynchronizedAppenderBase<E> implements AppenderAttachable<E> {
    AppenderAttachableImpl<E> aai = new AppenderAttachableImpl();
    //日誌隊列
	BlockingQueue<E> blockingQueue;
	public static final int DEFAULT_QUEUE_SIZE = 256;
    int queueSize = 256;
    int appenderCount = 0;
    static final int UNDEFINED = -1;
    int discardingThreshold = -1;
    boolean neverBlock = false;

6 自定義looger對象

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n"/>
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <target>System.err</target>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>
    <!--
       自定義 looger 對象
       additivity="false" 自定義 logger 對象是否繼承 rootLogger
    -->
    <logger name="com.nobug" level="info" additivity="false">
        <appender-ref ref="console"/>
    </logger>
    <root level="ALL">
        <appender-ref ref="console"/>
    </root>
</configuration>


7  log4j配置文字轉換爲logback

http://logback.qos.ch/translator/

log4j.rootLogger = debug,stdout
### 輸出信息到控制擡 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = log4j : [%-5p] %m%n
<?xml version="1.0" encoding="UTF-8"?>
<!-- For assistance related to logback-translator or configuration  -->
<!-- files in general, please contact the logback user mailing list -->
<!-- at http://www.qos.ch/mailman/listinfo/logback-user             -->
<!--                                                                -->
<!-- For professional support please see                            -->
<!--    http://www.qos.ch/shop/products/professionalSupport         -->
<!--                                                                -->
<configuration>
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <Target>System.out</Target>
        <encoder>
            <pattern>log4j : [%-5p] %m%n</pattern>
        </encoder>
    </appender>
    <root level="debug">
        <appender-ref ref="stdout"/>
    </root>
</configuration>

 

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