在日常開發中,我們經常需要用到日志來查看程序的運行情況,以便更好的把控項目。本文將介紹Java項目如何配置和使用log4j日志,包括:“使用Maven在pom.xml導入log4j的jar包”、“在resource目錄下新建log4j.xml文件”、“log4j文件頭信息”、“配置debug日志輸出到文件”、“配置INFO日志輸出到文件”、“輸出ERROR日志到文件”、“配置日志異步化AsyncAppender”、“配置控制台輸出”、“配置發送郵件”。
1、使用Maven在pom.xml導入log4j的jar包。
<!-- 日志文件管理包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
2、在resource目錄下新建log4j.xml文件。
3、log4j文件頭信息。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
4、配置debug日志輸出到文件。
輸出到指定目錄,每天產生一個日志文件DailyRollingFileAppender:
<!-- 輸出DEBUG日志到文件 -->
<appender name="log4jLogDebug" class="org.apache.log4j.DailyRollingFileAppender">
<!-- 輸出的文件位置 -->
<param name="file" value="D:/NBR_Log/DEBUG.log" />
<!-- 設置是否在重新啟動服務時,在原有日志的基礎添加新日志 -->
<param name="append" value="true" />
<!-- 設置文件大小 -->
<!-- <param name="MaxFileSize" value="1MB" /> -->
<!-- 設置文件備份個數,當log文件的大小超過上面文件設置的大小時,就會進行備份。當設置的文件備份個數用完后,它會自動覆蓋原有的log -->
<!-- <param name="MaxBackupIndex" value="10" /> -->
<!-- 設置輸出文件項目和格式 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %t %5p %c{1}:%L:%m%n" />
</layout>
<!-- 過濾日志級別輸出到對應文件 如果不需要過濾,則將所有級別的日志輸出到一個文件中 -->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="DEBUG" />
<param name="levelMax" value="DEBUG" />
</filter>
</appender>
5、配置INFO日志輸出到文件。
<!-- 輸出INFO日志到文件 -->
<appender name="log4jLogInfo" class="org.apache.log4j.DailyRollingFileAppender">
<!-- 輸出的文件位置 -->
<param name="file" value="D:/NBR_Log/INFO.log" />
<!-- <param name="DatePattern" value="_yyyy_MM_dd.log" /> -->
<!-- 設置是否在重新啟動服務時,在原有日志的基礎添加新日志 -->
<param name="append" value="true" />
<!-- 設置文件大小 -->
<!-- <param name="MaxFileSize" value="1MB" /> -->
<!-- 設置文件備份個數,當log文件的大小超過上面文件設置的大小時,就會進行備份。當設置的文件備份個數用完后,它會自動覆蓋原有的log -->
<!-- <param name="MaxBackupIndex" value="10" /> -->
<!-- 設置輸出文件項目和格式 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %t %5p %c{1}:%L:%m%n" />
</layout>
<!-- 過濾日志級別輸出到對應文件 如果不需要過濾,則將所有級別的日志輸出到一個文件中 -->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="INFO" />
<param name="levelMax" value="INFO" />
</filter>
</appender>
6、配置ERROR日志輸出到文件。
<!-- 輸出ERROR日志到文件 -->
<appender name="log4jLogError" class="org.apache.log4j.DailyRollingFileAppender">
<!-- 輸出的文件位置 -->
<param name="file" value="D:/NBR_Log/ERROR.log" />
<!-- 設置是否在重新啟動服務時,在原有日志的基礎添加新日志 -->
<param name="append" value="true" />
<!-- 設置文件大小 -->
<!-- <param name="MaxFileSize" value="1MB" /> -->
<!-- 設置文件備份個數,當log文件的大小超過上面文件設置的大小時,就會進行備份。當設置的文件備份個數用完后,它會自動覆蓋原有的log -->
<!-- <param name="MaxBackupIndex" value="10" /> -->
<!-- 設置輸出文件項目和格式 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %t %5p %c{1}:%L:%m%n" />
</layout>
<!-- 過濾日志級別輸出到對應文件 如果不需要過濾,則將所有級別的日志輸出到一個文件中 -->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="ERROR" />
<param name="levelMax" value="ERROR" />
</filter>
</appender>
7、配置日志異步化AsyncAppender。
輸出日志操作涉及到IO操作,是比較耗時的。配置日志異步化AsyncAppender,可以幫助我們提升打印日志的性能:
<appender name="log4jLogDebugAsync" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="0" />
<appender-ref ref="log4jLogDebug" />
</appender>
<appender name="log4jLogInfoAsync" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="0" />
<appender-ref ref="log4jLogInfo" />
</appender>
<appender name="log4jLogErrorAsync" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="0" />
<appender-ref ref="log4jLogError" />
</appender>
<appender name="SendEmailAsync" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="0" />
<appender-ref ref="MAIL" />
</appender>
8、配置控制台輸出。
<!-- 輸出到控制台 -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %t %5p %c{1}:%L:%m%n" />
</layout>
</appender>
9、配置發送郵件。
有ERROR日志時,發送郵件提醒信息:
<!-- 發郵件(只有ERROR時才會發送!) -->
<appender name="MAIL" class="org.apache.log4j.net.SMTPAppender">
<param name="threshold" value="ERROR" />
<!-- 日志的錯誤級別 <param name="threshold" value="fatal"/> -->
<!-- 緩存文件大小,日志達到數值時發送Email -->
<!-- <param name="BufferSize" value="0" />單位K -->
<param name="From" value="xxx" />
<param name="SMTPHost" value="smtp.bxit.vip" />
<param name="Subject" value="SSL_NBR_ERROR_MESSAGE" />
<param name="To" value="xxx" />
<param name="SMTPPort" value="465" />
<param name="SMTPUsername" value="xxx" />
<param name="SMTPPassword" value="xxxxxx" />
<param name="SMTPProtocol" value="smtps" />
<param name="SMTPDebug" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %t %5p %c{1}:%L:%m%n" />
</layout>
</appender>