我在 tomcat 服務器的 web.xml 中配置了一些過濾器(如下所示),這些過濾器在我們使用 log4j1.x 之前作業正常。
<filter>
<filter-name>newsession</filter-name>
<display-name>newsession</display-name>
<description>newsession</description>
<filter-class>com.demo.custom.filter.NewSession</filter-class>
<init-param>
<param-name>DomainName</param-name>
<param-value>.testlab.com</param-value>
</init-param>
<init-param>
<param-name>DomConfigFile</param-name>
<param-value>/opt/tomcat/webapp/demoapp/WEB-INF/classes/NAM_log4j.xml</param-value>
</init-param>
<init-param>
<param-name>customPropFile</param-name>
<param-value>/opt/tomcat/webapp/demoapp/WEB-INF/classes/custom_resources.properties</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>newsession</filter-name>
<url-pattern>/idff/sso</url-pattern>
</filter-mapping>
但是現在當我從 log4j1.x 移動到 log4j2.x 之后,當我們啟動 tomcat 服務時,我們在日志中收到以下錯誤。如果我再次放置“log4j-1.2.15.jar”檔案,它作業正常。但是現在我們在 log4j2.x 上,所以我們不能使用舊的 log4j1.x。
ERROR com.demo.custom.filter.NewSession - No transformation given
ERROR com.demo.custom.filter.NewSession - domConfigFile got null from web.xml, setting hardcoded value
ERROR com.demo.custom.filter.NewSession - custom_resources got null from web.xml, setting hardcoded value
main ERROR Error processing element category ([Configuration: null]): CLASS_NOT_FOUND
main ERROR Unknown object "root" of type org.apache.logging.log4j.core.config.LoggerConfig is ignored: try nesting it inside one of: ["Appenders", "Loggers", "Properties", "Scripts", "CustomLevels"]
下面給出了我的 Java 代碼,我只粘貼了我試圖初始化 servlet 過濾器的代碼。
package com.demo.custom.filter;
import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
@WebFilter({ "/NewSession" })
public class NewSession implements Filter {
static class FilteredRequest extends HttpServletRequestWrapper {
public FilteredRequest(ServletRequest request) {
super((HttpServletRequest)request);
}
public String getParameter(String paramName) {
String value = super.getParameter(paramName);
*********************************************
return value;
}
public static String decryptValue(String value){
String decryptvalue = null;
********************************************
return decryptvalue;
}
}
private static String domainName = null;
private static String domConfigFile=null;
private static Logger myLogger = LogManager.getLogger(NewSession.class);
private String custom_resources;
public void init(FilterConfig fConfig) throws ServletException {
try{
domainName = fConfig.getInitParameter("DomainName");
domConfigFile=fConfig.getInitParameter("DomConfigFile");
custom_resources=fConfig.getInitParameter("customPropFile");
}catch(Exception e){
myLogger.error(e.getMessage());
}
if(domainName == null){
domainName = ".testlab.com";
}
if(domConfigFile==null){
myLogger.error("domConfigFile got null from web.xml, setting hardcoded value");
domConfigFile = "/opt/tomcat/webapp/demoapp/WEB-INF/classes/NAM_log4j.xml";
}
if(custom_resources==null){
myLogger.error("custom_resources got null from web.xml, setting hardcoded value");
nidp_custom_resources = "/opt/tomcat/webapp/demoapp/WEB-INF/classes/custom_resources.properties";
}
}
}
請幫助我。我正在使用 tomcat 9 和 log4j v2.17.1。
uj5u.com熱心網友回復:
我的問題通過執行以下更改 TEST_log4j.xml 檔案得到解決,如下所示。
<Configuration>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%d{MM/dd HH:mm:ss} %-5p 0.30c %x - %m\n"/>
</Console>
<RollingFile name="RollingFile" fileName="/opt/tomcat/logs/MyCustomClassLogs.log" filePattern="/opt/tomcat/logs/MyCustomClassLogs.log-%i">
<PatternLayout>
<pattern>%d{MM/dd HH:mm:ss} %-5p %30.30c %x - %m\n</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="5 MB" />
</Policies>
<DefaultRolloverStrategy max="5"/>
</RollingFile>
<RollingFile name="ResetClass" fileName="/opt/tomcat/logs/resetTrace.log" filePattern="/opt/tomcat/logs/resetTrace.log-%i">
<PatternLayout>
<pattern>%d{MM/dd HH:mm:ss} %-5p %30.30c %x - %m\n</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="5 MB" />
</Policies>
<DefaultRolloverStrategy max="5"/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="com.demo.custom.filter.ResetClass" level="TRACE">
<AppenderRef ref="ResetClass"/>
</Logger>
<Logger name="com.demo.custom.test.MyCustomClass" level="TRACE">
<AppenderRef ref="RollingFile"/>
</Logger>
<Root level="error">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
uj5u.com熱心網友回復:
您在標題“domConfigFile got null from web.xml, setting hardcoded value”中參考的錯誤訊息是由@WebFilter您的過濾器類引起的。此注釋注冊您的過濾器的第二個實體,其配置為空(和空映射)。
如果您想要過濾器的單個實體,請添加name="newsession"到您的@WebFilter注釋或使用完全限定的類名 ( com.demo.custom.filter.NewSession) 作為過濾器名稱web.xml。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/530084.html
上一篇:如何將GoDaddySSL證書與SpringBoot嵌入式Tomcat服務器一起使用?
下一篇:TEST_log4j.xml:3:22:元素“log4j:configuration”的前綴“log4j”未系結
