上一篇有提到:log4j.appender.R.File = /logs/my.log,日志文件直接输出在盘符根目录下的logs文件夹下,而不是常用的项目根目录的logs目录下,这篇说说让其输出到项目的根目录下。
一、没有spring帮助管理的情况下,如前一篇的例子:简单的servlet作为容器的。
第一种方法:
log4j.properties的文件输出配置如下:log4j.appender.R.File = /logs/my.log
1、修改web.xml,将log4j作为init-param添加到servlet配置中:
<servlet> <servlet-name>TestLog4jServlet</servlet-name> <servlet-class>com.wjl.servlet.TestLog4jServlet</servlet-class> <init-param> <param-name>log4j</param-name> <param-value>/WEB-INF/classes/log4j.properties</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet>
2、修改TestLog4jServlet的init方法:
public void init(ServletConfig config) throws ServletException {
String prifix = config.getServletContext().getRealPath("/");
//getInitParameter("log4j"):web.xml中init-param的param-name,两者必须一致
String file = config.getInitParameter("log4j");
if(file != null){
Properties prop = new Properties();
try{
prop.load(new FileInputStream(prifix+file));
//log4j.appender.R.File:log4j.properties中文件输出位置的配置,必须与配置文件中的一致
prop.setProperty("log4j.appender.R.File",
prifix + prop.getProperty("log4j.appender.R.File"));
PropertyConfigurator.configure(prop);
}catch(IOException e){
e.printStackTrace();
}
}
}
第二种方法(使用系统变量的方法):
log4j.properties的文件输出配置如下:log4j.appender.R.File = ${webRoot}/logs/my.log
1、修改web.xml文件,内容与方法一种的相同。
2、修改TestLog4jServlet的init方法:
public void init(ServletConfig config) throws ServletException {
String root = config.getServletContext().getRealPath("/");
String log4jLocation = config.getInitParameter("log4j");
System.setProperty("webRoot", root);
if (log4jLocation!=null) {
PropertyConfigurator.configure(root + log4jLocation);
}
}
第三种方法:使用服务器环境变量
log4j的配置文件支持服务器的vm的环境变量,格式类似${catalina.home}
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=${catalina.home}/logs/logs_tomcat.log
log4j.appender.R.MaxFileSize=10KB
其中的${catalina.home}并非windows系统的环境变量,这个环境变量就不需要在Windows系统的环境变量中设置。之所以这样,你可以看看tomcat\bin\catalina.bat(startup,shutdown都是调用这个)里面自带有-Dcatalina.home= "%CATALINA_HOME%" 。继承这个思想,所以你也可以自己设定一个参数-Dmylog.home="D:/abc/log"到对应的服务器java启动的vm参数中。
该方法参考自:http://www.linuxidc.com/Linux/2014-09/106571.htm
没看懂什么意思,所以没有实验。
二、有spring帮助管理的:
log4j.properties的文件输出配置如下:log4j.appender.R.File = ${webRoot_root}/logs/my.log
在web.xml中初始化log4j:
<context-param> <description>日志文件的路径 </description> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/classes/log4j.properties</param-value> </context-param> <context-param> <description>log4jRefreshInterval为6000表示 开一条watchdog线程每6秒扫描一下配置文件的变化。 </description> <param-name>log4jRefreshInterval</param-name> <param-value>600000</param-value> </context-param> <context-param> <description>设置日志文件中,取系统根目录的key</description> <param-name>webAppRootKey</param-name> <param-value>webRoot_root</param-value> </context-param> <listener> <display-name>日志文件的侦听器</display-name> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener>