Hi: I want the logs created by log4j put under the app dir,so I set the placeholder in the log4j.properties:
# chartstdout is set to be a ConsoleAppender. log4j.appender.chartstdout=org.apache.log4j.ConsoleAppender log4j.appender.chartstdout.layout=org.apache.log4j.PatternLayout log4j.appender.chartstdout.layout.ConversionPattern=%-4r [%t] %-5p %l %x - %m%n log4j.appender.chartfileout=org.apache.log4j.FileAppender log4j.appender.chartfileout.File=${apppath}/logs/log.html log4j.appender.chartfileout.Append=true log4j.appender.chartfileout.layout=com.test.util.CustomHTMLLayout log4j.rootLogger=debug, chartstdout,chartfileout Then in my servlet whose "load-on-startup" attribute is "0" I set the property "apppath",but it does not work. It seems that the log4j read the log4j.properties and config the log before I modify the property. public void init() { DbManager.init(); // log String context = getServletConfig().getServletContext().getRealPath("/"); Properties p = new Properties(); p.setProperty("apppath", context); try { p.load(InitServlet.class.getResourceAsStream("/log4j.properties")); } catch (IOException e) { e.printStackTrace(); } PropertyConfigurator.configure(p); } Of course,I can rename the log4j.properties,then the log4j will not find the file but I can. However some other libs which I used in my appliction require log4j also,they need the log4j.properties to generate there logs. Any ideas?