Jakarta ee 在log4j初始化之前设置系统属性

Jakarta ee 在log4j初始化之前设置系统属性,jakarta-ee,servlets,log4j,Jakarta Ee,Servlets,Log4j,我需要在/web inf/logs文件夹中保存日志文件,因此我试图给出log4j的相对路径 我正在侦听器中尝试以下代码: @Override public void contextInitialized(ServletContextEvent event) { ServletContext context = event.getServletContext(); System.setProperty("azraspinaRootPath", context.getRealPath

我需要在
/web inf/logs
文件夹中保存日志文件,因此我试图给出log4j的相对路径

我正在侦听器中尝试以下代码:

@Override
public void contextInitialized(ServletContextEvent event) {
    ServletContext context = event.getServletContext();
    System.setProperty("azraspinaRootPath", context.getRealPath("/"));

}
这段代码保存在log4j.xml文件中

<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
    <param name="FileNamePattern" value="${azraspinaRootPath}WEB-INF/logs23/hibernate-%d{yyyy-MM-dd}.gz" />
</rollingPolicy>

web.xml中的这行代码:

<listener>
    <listener-class>ir.raysis.azraspina.startup.servlet.StartupListener</listener-class>
</listener> 

ir.raysis.azraspina.startup.servlet.StartupListener
但log4j似乎在这个侦听器之前初始化,因为它将我的日志文件存储在
home/webinf/logs


我能做些什么来让它工作?这可能是一个不好的做法,所以如果你知道在共享tomcat中更好的做法,请告诉我。谢谢

希望这对你有帮助

在web.xml中

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="log4j-webapp-demo" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <servlet>
        <servlet-name>Log4JTestServlet</servlet-name>
        <servlet-class>test.Log4JTestServlet</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>Log4JInitServlet</servlet-name>
        <servlet-class>test.Log4JInitServlet</servlet-class>
        <init-param>
            <param-name>log4j-properties-location</param-name>
            <param-value>WEB-INF/log4j.properties</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Log4JTestServlet</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>
</web-app>
import org.apache.log4j.Logger; 

import java.io.*; 
import java.sql.SQLException; 
import java.util.*; 

public class log4jExample{ 



 /* Get actual class name to be printed on */ 
 static Logger log = Logger.getLogger( 
 log4jExample.class.getName());  

 public static void main(String[] args) 
 throws IOException,SQLException{ 

 log.debug("Hello this is an debug message"); 
 log.info("Hello this is an info message"); 
 } 
}