设置“log4j.properties”文件的绝对路径

时间:2014-11-25 09:56:49

标签: java logging log4j apache-commons-logging

我正在为我的网络应用程序使用apache commons + log4j。

通常log4j需要类路径内的配置文件;但我需要将日志记录配置委托给外部文件(我需要在环境中部署.war,但日志配置(最大大小,位置等)由第二个团队组成。

我的classpath中有一个commons-logging.properties

org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
# log4j.configuration=/absolute/path/where/external/logs/are/log4j.properties

不幸的是,评论的行不起作用。

有没有办法用外部配置文件设置log4j?

4 个答案:

答案 0 :(得分:3)

您可以将其设置为系统属性log4j.configuration属性..例如在J2SE app

java -Dlog4j.configuration=file:/path/to/log4j.properties myApp

注意,该属性值必须是URL。

有关Log4j manual.

中的更多阅读部分“默认初始化过程”

也可以让ServletContextListener设置系统属性:

import java.util.Enumeration;
import javax.servlet.*;

public class SystemPropertiesHelper implements
        javax.servlet.ServletContextListener {
    private ServletContext context = null;

    public void contextInitialized(ServletContextEvent event) {
        context = event.getServletContext();
        Enumeration<String> params = context.getInitParameterNames();

        while (params.hasMoreElements()) {
          String param = (String) params.nextElement();
          String value = 
            context.getInitParameter(param);
          if (param.startsWith("customPrefix.")) {
              System.setProperty(param, value);
          }
        }
    }

    public void contextDestroyed(ServletContextEvent event) {
    }
}

然后把它放到你的web.xml中(也应该可以用于context.xml)

<context-param>
        <param-name>customPrefix.property</param-name>
        <param-value>value</param-value>
        <param-type>java.lang.String</param-type>
</context-param>

<listener>
    <listener-class>servletUtils.SystemPropertiesHelper</listener-class>    
</listener>

我从answer的听众代码中得到了这个。

我希望这可以帮到你!

答案 1 :(得分:2)

您可以使用指示配置文件路径的jvm参数:

-Dlog4j.configuration=absolute path

绝对路径的示例:

java -Dlog4j.configuration="file:/dir1/log4j.properties"

答案 2 :(得分:0)

设置系统属性log4j.configuration = / abslute /或/ relative / path_to_file_name

commons日志记录只需要知道它正在使用什么日志记录实现,它自己的日志记录实现以它始终配置的任何方式配置。

log4j manual.

中记录了这一点

答案 3 :(得分:0)

如果您使用Spring Framework,则可以使用org.springframework.web.util.Log4jConfigListener

您只需要使用文件位置指定参数log4jConfigLocation(使用URL for File)。 e.g:

<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>file:/absolute/path/where/external/logs/are/log4j.properties</param-value>
</context-param>
<context-param>
    <param-name>log4jRefreshInterval</param-name>
    <param-value>1000</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

您可以指定log4jRefreshInterval,即配置文件刷新检查之间的间隔(以毫秒为单位)。


org.springframework.web.util.Log4jWebConfigurer的{​​{3}}中查看更多内容。