Lo4j(二)級別和優化

weixin_33982670發表於2018-05-19

在log裡面有日誌級別:

DEBUG Level: 指出細粒度資訊事件對除錯應用程式是非常有幫助的,就是輸出debug的資訊.
INFO level: 表明訊息在粗粒度級別上突出強調應用程式的執行過程,就是輸出提示資訊.
WARN level: 表明會出現潛在錯誤的情形,就是顯示警告資訊.
ERROR level: 指出雖然發生錯誤事件,但仍然不影響系統的繼續執行.就是顯示錯誤資訊.
FATAL level: 指出每個嚴重的錯誤事件將會導致應用程式的退出.
ALL level: 是最低等級的,用於開啟所有日誌記錄.
OFF level: 是最高等級的,用於關閉所有日誌記錄.

從低到高,會在設定低階別後,輸出比其級別高的資訊。

DEBUG < INFO < WARN < ERROR < FATAL

比如在輸出控制檯資訊的時候:

    <!-- 將日誌資訊輸出到控制檯 -->
     <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
     <!--    設定日誌輸出的樣式 -->     
        <layout class="org.apache.log4j.PatternLayout">
          <!--   設定日誌輸出的格式 -->
           <!--  <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" /> -->
        <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p] [method:%l]%m%n"/>
        <!-- 設定日誌輸出級別,開發可以設定為debug,正式上線可以用info -->
        <param name="Threshold" value="DEBUG"></param> 
        </layout>
    </appender>

這裡設定了debug,就會輸出debug,及大於它的資訊。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">    
<log4j:configuration>

    <!-- 將日誌資訊輸出到控制檯 -->
     <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
     <!--    設定日誌輸出的樣式 -->
     
        <layout class="org.apache.log4j.PatternLayout">
          <!--   設定日誌輸出的格式 -->
           <!--  <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" /> -->
        <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p] [method:%l]%m%n"/>
        <!-- 設定日誌輸出級別,開發可以設定為debug,正式上線可以用info -->
        <param name="Threshold" value="DEBUG"></param> 
        </layout>
    </appender>
    
    <!-- 輸出日誌到檔案  每天一個檔案 -->
     <appender name="logfile" class="org.apache.log4j.DailyRollingFileAppender">
         <param name="Threshold" value="info"></param> 
        <!-- 設定日誌資訊輸出檔案全路徑名 -->
        <param name="File" value="D:/log4j/logs/logFile.log" />
        <!--   設定日誌以天為單位回滾一次,即產生一個新的日誌檔案 -->
        <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
       <!--  設定日誌輸出的樣式 -->
        <layout class="org.apache.log4j.PatternLayout">
           <!--  設定日誌輸出的格式 -->
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p] [method:%l]%m%n" />
        </layout>
    </appender>
    <!-- 設定日誌快取,及快取大小 -->
    <appender name="async" class="org.apache.log4j.AsyncAppender">
	    <param name="BufferSize" value="512"/>
	    <appender-ref ref="stdout"/>
	    <appender-ref ref="logfile"/>
	</appender>
    
    
     <!-- 輸出日誌到檔案  檔案大小到達指定尺寸的時候產生一個新的檔案 --> 
    <!-- 將日誌資訊輸出到檔案,但是當檔案的大小達到某個閾值的時候,日誌檔案會自動回滾 -->
    <appender name="railyFile" class="org.apache.log4j.RollingFileAppender">
        <!-- 設定日誌資訊輸出檔案全路徑名 -->
        <param name="File" value="D:/log4j/logs/logFile2.log" />
 <!--        設定是否在重新啟動服務時,在原有日誌的基礎新增新日誌
        <param name="Append" value="true" /> -->
        <!-- 設定儲存備份回滾日誌的最大個數 -->
        <param name="MaxBackupIndex" value="10" />
      <!--   設定當日志檔案達到此閾值的時候自動回滾,單位可以是KB,MB,GB,預設單位是KB -->
        <param name="MaxFileSize" value="10MB" />
       <!--  設定日誌輸出的樣式 -->
        <layout class="org.apache.log4j.PatternLayout">
           <!--  設定日誌輸出的格式 -->
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p] %m%n" />
        </layout>
    </appender>

    <!-- 設定日誌快取,及快取大小 -->
    <appender name="railyFileappender" class="org.apache.log4j.AsyncAppender">
	    <param name="BufferSize" value="512"/>
	    <appender-ref ref="railyFile"/>
	</appender>
	<!-- 整體設定日誌的輸出級別 -->
<root>
    <level value="debug" />
    <appender-ref ref="stdout"/>
    <appender-ref ref="logfile"/>
    <appender-ref ref="railyFile"/>
</root>
</log4j:configuration>

  可以在root統一設定,所有appender的日誌級別,不過,如果在appender裡面設定的高於root的,

<param name="Threshold" value="info"></param> 

以append裡面的優先順序為準。 

如以上,控制檯會從debug資訊輸出,log檔案就只會輸出info級別以上的資訊。

優化:

a:控制log資訊的級別,也可以起到優化的作用。

b:設定日誌快取,以及快取大小 

<param name="BufferSize" value="512"/>

   以上配置說明,當日志內容達到8k時,才會將日誌輸出到日誌輸出目的地。

c:設定日誌輸出為非同步方式 

    <!-- 設定日誌快取,及快取大小  和日誌的非同步輸出 -->
    <appender name="async" class="org.apache.log4j.AsyncAppender">
	    <param name="BufferSize" value="512"/>
	    <appender-ref ref="stdout"/>
	    <appender-ref ref="logfile"/>
	</appender>

  配置log的格式:

日誌格式化(Layout)
%c 類全名
%d 時間
%f 類名
%l 位置
%m 資訊
%n 換行
%p 級別
%r 耗時
%t 執行緒名

相關文章