[英]Log4J - J2EE - dynamic variable
在log4j.xml配置中使用JVM变量不起作用...
System.setProperty("log_dir", logDirPath);
<param name="file" value="${log_dir}\toto.log" />
如果我在调试中运行Web服务器时重新加载它,则它可以工作...
**更新
package com.webapp.startup;
import java.io.PrintStream;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import com.webapp.objects.impl.LoggingOutputStream;
public class Log4jStartup implements ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent arg0) {
}
@Override
public void contextInitialized(ServletContextEvent event) {
try {
ServletContext context = event.getServletContext();
System.setProperty("log_dir", "C:/path");
System.setErr(new PrintStream(new LoggingOutputStream(Logger.getRootLogger(), Level.ERROR), true));
System.setOut(new PrintStream(new LoggingOutputStream(Logger.getRootLogger(), Level.INFO), true));
String path = context.getRealPath("/WEB-INF/classes/log4j.xml");
PropertyConfigurator.configure(path);
} catch (Exception e) {
e.printStackTrace();
}
}
}
在setErr和setOut之前初始化属性...谢谢大家!
在log4j
系统初始化之后,您可能正在填充该属性。
为了之前完成它,您可以在启动服务器时从命令行提供它,也可以使用本示例中的初始化servlet。 滚动到“ Tomcat”下的“默认初始化”,并记住,您只需要指定属性即可,而不是log4j配置文件。
您应该告诉我们何时设置了此属性,但为时已晚。 通常在设置此属性之前很早就初始化Log4j。 我建议您在Web服务器启动脚本的初始化块中设置此参数。 使用-Dlog_dir=path
语法。
PS是什么服务器? Tomcat的?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.