Log4J输出日志到WEB工程目录的实现方法
2012-11-21 17:56
459 查看
Log4J输出日志到WEB工程目录的实现方法
将Log4j的日志输出的web工程目录会方便系统移植、日志远程查看。那么如何来实现呢?可以通过一个自定义的Servlet设置系统属性的方法来实现,只需要几句代码,而且可配置、移植方便。一、Servlet代码
Java代码
package com.wallimn.gyz.util;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
public class SystemServlet extends HttpServlet {
private static final long serialVersionUID = 8164865597169685698L;
public void init() throws ServletException {
String rootPath = this.getServletContext().getRealPath("/");
String log4jPath = this.getServletConfig().getInitParameter("wallimn.log4j.path");
//若没有指定wallimn.log4j.path初始参数,则使用WEB的工程目录
log4jPath = (log4jPath==null||"".equals(log4jPath))?rootPath:log4jPath;
System.setProperty("wallimn.log4j.path", log4jPath);
super.init();
}
}
二、web.xml文件配置
<servlet>
<servlet-name>SystemServlet</servlet-name>
<servlet-class>com.wallimn.gyz.util.SystemServlet</servlet-class>
<init-param>
<param-name>wallimn.log4j.path</param-name>
<!--引自若未指定,则使用工程目录,若指定,使用指定目录-->
<param-value></param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
三、log4j.properties文件配置(输出到工程目录下的logs子目录中)
log4j.appender.FILEOUT = org.apache.log4j.DailyRollingFileAppender
log4j.appender.FILEOUT.File = ${wallimn.log4j.path}logs/log.html
log4j.appender.FILEOUT.Append = true
log4j.appender.FILEOUT.Threshold = DEBUG
log4j.appender.FILEOUT.layout = org.apache.log4j.HTMLLayout
网上流传的另一种方法:[color=brown][/color]
具体实现:编写一个 servlet, 在系统加载的时候, 就把 properties 的文件读到一个 properties 文件中。那个 file 的属性值(我使用的是相对目录)改掉(前面加上系统的根目录),然后把这个 properties 对象设置到 propertyConfig 中去,这样就初始化了 log 的设置。在后面的使用中就用不着再配置了。
一般在我们开发项目过程中,log4j 日志输出路径固定到某个文件夹,这样如果我换一个环境,日志路径又需要重新修改,比较不方便,目前我采用了动态改变日志路径的方法来实现相对路径保存日志文件
(1) 在项目启动时,装入初始化类:
public class Log4jInit extends HttpServlet {
static Logger logger = Logger.getLogger(Log4jInit.class);
public Log4jInit() {
}
public void init(ServletConfig config) throws ServletException {
String prefix = config.getServletContext().getRealPath("/");
String file = config.getInitParameter("log4j");
String filePath = prefix + file;
Properties props = new Properties();
try {
FileInputStream istream = new FileInputStream(filePath);
props.load(istream);
istream.close();
//toPrint(props.getProperty("log4j.appender.file.File"));
String logFile = prefix + props.getProperty("log4j.appender.file.File");//设置路径
props.setProperty("log4j.appender.file.File",logFile);
PropertyConfigurator.configure(props);//装入log4j配置信息
} catch (IOException e) {
toPrint("Could not read configuration file [" + filePath + "].");
toPrint("Ignoring configuration file [" + filePath + "].");
return;
}
}
public static void toPrint(String content) {
System.out.println(content);
}
}
实际上 log4j 的配置文件如果为默认名称: log4j.properties,则可放置在 JVM 能读到的 classpath 里的任意地方,一般是放在 WEB-INF/classes 目录下。当log4j 的配置文件不再是默认名称,则需要另外加载并给出参数,如上 "PropertyConfigurator.configure(props);//装入log4j配置信息"。
(2) web.xml 中的配置
<servlet>
<servlet-name>log4j-init</servlet-name>
<servlet-class>Log4jInit</servlet-class>
<init-param>
<param-name>log4j</param-name>
<param-value>WEB-INF/classes/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup> </servlet>
注意:上面的 load-on-startup 设为 0 ,以便在 Web 容器启动时即装入该 Servlet 。log4j.properties 文件放在根的properties子目录中,也可以把它放在其它目录中。应该把 .properties 文件集中存放,这样方便管理。
(3) log4j.properties 中即可配置 log4j.appender.file.File 为当前应用的相对路径
相关文章推荐
- Log4J输出日志到WEB工程目录的实现方法
- web项目Log4j日志输出路径配置问题 问题描述:一个web项目想在一个tomcat下运行多个实例(通过修改war包名称的实现),然后每个实例都将日志输出到tomcat的logs目录下实例名命名的文
- Log4j按级别输出日志到不同文件的实现方法
- log4j.xml文件输出到web工程相对路径的log目录
- Log4J日志配置详解和自定义log4j日志级别及输出日志到不同文件实现方法
- springmvc web项目实现动态改变log4j日志输出
- Log4J日志配置详解和自定义log4j日志级别及输出日志到不同文件实现方法
- 简述Hibernate下如何实现log4j的日志输出方法
- LOG4J输出日志到web目录的相对路径
- LOG4J输出日志到web目录的相对路径
- Log4j官方文档翻译(五、日志输出的方法)
- Python使用logging结合decorator模式实现优化日志输出的方法
- 自定义Appender ,实现输出log4j日志到GUI
- 把system.out.println的内容用log4j输出到tomcat日志里方法
- Linux查看应用的log4j的日志输出目录
- 使用log4cplus实现的分目录存放日志服务器完整工程+关键客户端代码
- Log4j2的日志配置文件,log4j2.xml文件的配置(实现控制台输出,各级别分别文件输出,自动压缩等)
- 如何实现把web项目的输出流重置,并将打印语句结果写到日志文件
- 在tomcat下 控制 log4j的日志输出目录
- Eclipse 使用 Maven 构建动态 Web 工程,默认无 java 目录的解决方法