我正在为我的网络应用程序使用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?
答案 0 :(得分:3)
您可以将其设置为系统属性log4j.configuration
属性..例如在J2SE app
java -Dlog4j.configuration=file:/path/to/log4j.properties myApp
注意,该属性值必须是URL。
中的更多阅读部分“默认初始化过程”也可以让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日志记录只需要知道它正在使用什么日志记录实现,它自己的日志记录实现以它始终配置的任何方式配置。
中记录了这一点答案 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}}中查看更多内容。