0

当我在本地机器(windows)中部署 wep 应用程序时,以下配置有效

public void contextInitialized(ServletContextEvent sce) {
    Logger logger = null;
    ServletContext servletContext = sce.getServletContext();
    String prefix = servletContext.getRealPath("/");
    String log4jFile = servletContext.getInitParameter("log4j");       
    if (log4jFile != null) {
        DOMConfigurator.configure(prefix + log4jFile);
        logger = LogManager.getLogger(StartupListener.class.getName());
        logger.info("LOG4J loaded successfully: " + log4jFile);
    }
}

<context-param>
    <param-name>log4j</param-name>
    <param-value>WEB-INF/classes/com/domain/resources/log4j.xml</param-value>
</context-param>
<listener>
    <listener-class>com.domain.util.StartupListener</listener-class>
</listener>

但是在 Linux 中安装 Web 应用程序时,我收到以下错误消息:

log4j:ERROR Could not parse file [nullWEB-INF/classes/com/domain/resources/log4j.xml].
 java.io.FileNotFoundException: /app/home/wdmt3/AdminServer/nullWEB-INF/classes/com/domain/resources/log4j.xml (No such file or directory)

有什么建议吗?

4

3 回答 3

0
<context-param>
    <param-name>log4j</param-name>
    <param-value>/WEB-INF/classes/com/domain/resources/log4j.xml</param-value>
</context-param>
于 2013-03-21T02:25:46.607 回答
0

问题

  • servletContext.getRealPath返回 null 并且您的日志文件路径变为

      nullWEB-INF/classes/com/domain/resources/log4j.xml
    

无法加载此文件,log4j 只会抛出您看到的错误消息。

  • 那么为什么servletContext.getRealPath返回 null 呢?

ServletContext.getRealPath(String path)状态的 API 文档:

如果 servlet 容器无法将给定的虚拟路径转换为真实路径,则此方法返回 null。

不同的容器可能有完全不同的行为。

解决方案

  • 尝试使用 spring mvc 的解决方案并确保 log4jFile 以“/”开头:

    String log4jFile = servletContext.getInitParameter("log4j"); 
    String fullPath = servletContext.getRealPath(log4jFile);
    
于 2013-03-21T05:34:34.957 回答
0

该问题通过正确配置 weblogic 服务器以检索路径(域 -> Web 应用程序 -> 已启用存档真实路径)解决

于 2013-10-15T15:43:30.740 回答