下面以xml格式的log4j配置文件为例说明
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false"> <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> <param name="Target" value="System.err"/> <param name="Threshold" value="ALL"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%d{HH:mm:ss,SSS}][%p,%c{1}] %m%n"/> </layout> </appender> <appender name="FILE" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="${log4jdir}/log.txt"/> <param name="Threshold" value="ALL"/> <param name="MaxFileSize" value="300KB"/> <param name="MaxBackupIndex" value="20"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%d{HH:mm:ss,SSS}][%p,%c{1}] %m%n"/> </layout> </appender> <root> <level value="DEBUG"/> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE"/> </root> </log4j:configuration>
1 在log4j.xml配置文件中以 ${变量名} 写路径 <param name="File" value="${log4jdir}/log.txt"/>
2 在初始化log4j之前设置系统变量
3 上面d:/webroot/log4j 是写死了的, 但这个路径可以根据实际情况动态获得 比如你想得到WEB-INF的上级路径,可以这么写 这样解决相对web路径的问题
public String getWebRootPath(ServletContextEvent sce) {
return sce.getServletContext().getRealPath("/");
}
4 很多人喜欢直接把log4j.xml或log4j.properties文件放到classes下而不做DOMConfigurator.configure(log4jfile);这个操作,这时候可以在启动时可使用 java -Dlog4jdir=路径
System.setProperty("log4jdir","d:/webroot/log4j");
String log4jfile = "log4j.xml";
DOMConfigurator.configure(log4jfile);