在日常开发中,我们经常需要用到日志来查看程序的运行情况,以便更好的把控项目。本文将介绍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>