spring5取消Log4jConfigListener,運用Log4jServletContextListener代替(log4j2.xml的配置)

說明:最經工作需要涉及到了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

 

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