說明:最經工作需要涉及到了log4j的相關知識,記錄下自己是如何運用的,方便下次忘了便於參考。
目的:將不同級別的日誌存儲到指定的文件中。
問題:一開始準備直接套用老系統中log4j.properties配置,將properties文件導過來,配置好web.xml文件,啓動服務驚奇的發現報錯了,提示找不到Log4jConfigListener,查看了下原因,老系統的spring版本爲3.1.0.RELEASE,新的系統中用的是5.1.5.RELEASE,通過Log4jConfigListener權限定名查看,在5.1.5.RELEASE版本中壓根就沒有這個了,好吧,查資料找解決辦法吧,原來spring建議用log4j2 來替換這個類。
<!-- 原web.xml中配置-->
<!-- 定義LOG4J監聽器 -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<!-- log4jConfigLocation:log4j配置文件存放路徑 -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param>
log4j2配置:
1、導入jar包:log4j-api.jar,log4j-code.jar,log4j-web.jar(包的版本沒有做具體的研究,我用的2.11.1)
2、配置web.xml:需將下面內容配置在web.xml最前面,網上介紹說防止日誌不打印的問題,沒太深究,尷尬………………
<listener>
<listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
</listener>
<filter>
<filter-name>log4jServletFilter</filter-name>
<filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>log4jServletFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
3、添加log4j2.xml:以下是我使用的一個測試用的log4j2.xml配置,親測可用(完善後的xml配置見https://blog.csdn.net/freedom_fire/article/details/89536729,文檔僅供參考,不喜勿噴)
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="off" monitorInterval="1800">
<properties>
<property name="FILE_NAME">ubs</property>
</properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY" />
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" />
</Console>
<File name="info" fileName="${web:rootDir}/../../ubslogs/info.log" append="true">
<Filters>
<ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL" />
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
</Filters>
<PatternLayout pattern="%d{yyyy.MM.dd HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n" />
</File>
<File name="error" fileName="${web:rootDir}/../../ubslogs/error.log" append="true">
<Filters>
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" />
</Filters>
<PatternLayout pattern="%d{yyyy.MM.dd HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n" />
</File>
</Appenders>
<Loggers>
<Root level="trace" additivity="false">
<!-- 這裏是輸入到控制檯-->
<AppenderRef ref="Console"/>
<!-- 這裏是輸入到文件,很重要-->
<AppenderRef ref="info"/>
<AppenderRef ref="error"/>
</Root>
</Loggers>
</Configuration>
4、代碼邏輯
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@Controller
@RequestMapping(value="/test")
public class Test {
private static final Logger logger = LogManager.getLogger(Test.class);
@RequestMapping(value="/test",method = RequestMethod.GET)
public String test() {
logger.info("info……………………………………");
logger.warn("warn……………………………………");
logger.error("error……………………………………");
logger.fatal("fatal……………………………………");
return "HelloWorld";
}
}
ok,至此,驗證完畢了,沒有問題。
參考文檔:
https://blog.csdn.net/zhiyuzhe/article/details/78850238
https://www.cnblogs.com/hyyq/p/7171227.html
https://blog.csdn.net/womeng2009/article/details/53510913
https://blog.csdn.net/cnwyt/article/details/79298423
https://bglmmz.iteye.com/blog/2154490