首页 > 代码库 > java web 项目如何加载log4j配置文件

java web 项目如何加载log4j配置文件

在整个WEB系统中,为了统一的使用日志管理,需要在系统启动的时候就加载Log4j的配置文件,这样才能保证以后使用log4j的格式是一致的,便于跟踪和解决问题。

那么,如何在系统启动的时候加载log4j的配置文件呢?下面我简单的介绍一下:

1、在web.xml文件中添加一个“监听器”

Xml代码 复制代码 收藏代码
  1. <!-- 加载log4j的配置信息 -->
  2. <listener>
  3. <listener-class>hb.init.log4j.Log4jInit</listener-class>
  4. </listener>
<!-- 加载log4j的配置信息 -->
  <listener>
  	<listener-class>hb.init.log4j.Log4jInit</listener-class>
  </listener>

2、“监听类”继承“ServletContextListener”接口

Java代码 复制代码 收藏代码
  1. package hb.init.log4j;
  2. import java.io.FileInputStream;
  3. import java.io.IOException;
  4. import java.util.Properties;
  5. import javax.servlet.ServletContext;
  6. import javax.servlet.ServletContextEvent;
  7. import javax.servlet.ServletContextListener;
  8. import org.apache.log4j.Logger;
  9. import org.apache.log4j.PropertyConfigurator;
  10. public class Log4jInit implements ServletContextListener{
  11. Logger log = Logger.getLogger(Log4jInit.class);
  12. public void contextDestroyed(ServletContextEvent sce) {
  13. log.info("Log4jInit contextDestroyed!");
  14. }
  15. public void contextInitialized(ServletContextEvent sce) {
  16. //得到servletContext对象的方法
  17. ServletContext sc = sce.getServletContext();
  18. //指明文件的相对路径就能够得到文件的绝对路径
  19. System.out.println(sc.getRealPath("/"));
  20. String path = sc.getRealPath("/config/log4j.properties");
  21. //启动服务器的时候加载日志的配置文件
  22. init(path,sc);
  23. log.info("log4j");
  24. }
  25. /**
  26. *
  27. * @param path 配置文件的路径
  28. * @param sc ServletContext对象
  29. */
  30. public void init(String path,ServletContext sc){
  31. FileInputStream istream = null;
  32. try{
  33. Properties props = new Properties();
  34. //加载配置文件
  35. istream = new FileInputStream(path);
  36. props.remove("log4j.appender.file.File");
  37. System.out.println(sc.getRealPath("/log/hb.log"));
  38. //指明log文件的位置
  39. props.put("log4j.appender.file.File", sc.getRealPath("/log/hb.log"));
  40. //加载文件流,加载Log4j文件的配置文件信息
  41. props.load(istream);
  42. PropertyConfigurator.configure(props);
  43. } catch (Exception ex){
  44. try {
  45. throw new Exception(ex);
  46. } catch (Exception e) {
  47. e.printStackTrace();
  48. }
  49. } finally{
  50. try {
  51. istream.close();
  52. } catch (IOException e) {
  53. e.printStackTrace();
  54. }
  55. }
  56. }
  57. }
package hb.init.log4j;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

public class Log4jInit implements ServletContextListener{
	
	Logger log = Logger.getLogger(Log4jInit.class);
	
	public void contextDestroyed(ServletContextEvent sce) {
		log.info("Log4jInit contextDestroyed!");
	}

	public void contextInitialized(ServletContextEvent sce) {
		
		//得到servletContext对象的方法
		ServletContext sc = sce.getServletContext();
		//指明文件的相对路径就能够得到文件的绝对路径
		System.out.println(sc.getRealPath("/"));
		String path = sc.getRealPath("/config/log4j.properties");
		
		//启动服务器的时候加载日志的配置文件
		init(path,sc);
		log.info("log4j");
	}
	
	
	/**
	 * 
	 * @param path 配置文件的路径
	 * @param sc ServletContext对象
	 */
	public void init(String path,ServletContext sc){
		FileInputStream istream = null;
		try{
			Properties props = new Properties();
			//加载配置文件
			istream = new FileInputStream(path);
			props.remove("log4j.appender.file.File");
			System.out.println(sc.getRealPath("/log/hb.log"));
			//指明log文件的位置
			props.put("log4j.appender.file.File", sc.getRealPath("/log/hb.log"));
			//加载文件流,加载Log4j文件的配置文件信息
			props.load(istream);
			PropertyConfigurator.configure(props);
		} catch (Exception ex){
			try {
				throw new Exception(ex);
			} catch (Exception e) {
				e.printStackTrace();
			}
		} finally{
			try {
				istream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	
}

加载log4j的配置文件的目的是为了使日志文件“放在跟工程相对路径的地方”,这样即使将项目移植到不同的操作系统上面,显示也是正常的