log4j在web工程中的一个简单实例

Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。

工程结构:

log4j.properties配置:

log4j.rootLogger=DEBUG,stdout,rollingFile

# 控制台输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout.ConversionPattern=[%d] [%t] [%5p] [%c.%M(%F:%L)] - %m%n

# 文件输出
log4j.appender.rollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.rollingFile.Append=true
##log4j.appender.rollingFile.File=d:/logs/log1.log
log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout
# %5p : p是日志级别,5p表示日志级别打印占5个字符,少的字符用空格填充
log4j.appender.rollingFile.layout.ConversionPattern=[%d] [%t] [%5p] [%c.%M(%F:%L)] - %m%n

web.xml中的配置:

<context-param>
	<param-name>log4jConfigLocation</param-name>
	<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
<context-param>
	<description>path of the logs</description>
	<param-name>logspath</param-name>
	<param-value>/WEB-INF/logs/</param-value>
</context-param>

<listener>
	<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

<listener>
	<listener-class>com.chaol.listener.BaseContextListener</listener-class>
</listener>

 监听类:

package com.chaol.listener;

import java.io.File;
import java.io.FileInputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
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 BaseContextListener implements ServletContextListener {
	private static Logger logger = Logger.getLogger(BaseContextListener.class);

	public static ServletContext servletContext;
	
	private static String timeNode = "";
	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		
	}

	@Override
	public void contextInitialized(ServletContextEvent arg0) {
		timeNode = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
		servletContext = arg0.getServletContext();
		//重新加载log4j配置文件
		reloadLog4jProperties();
		logger.info("启动容器,创建监听");
	}
	
	private void reloadLog4jProperties(){
		String webContentRoot = servletContext.getRealPath(".");
		String log4jPro = servletContext.getInitParameter("log4jConfigLocation").replace("/", "\\");
		String log4jLogs = servletContext.getInitParameter("logspath").replace("/", "\\");
		FileInputStream fis = null;
		Properties p = new Properties();
		try {
			File proFile = new File(webContentRoot + log4jPro); 
			fis = new FileInputStream(proFile);
			p.load(fis);
			p.setProperty("log4j.appender.rollingFile.File", webContentRoot + log4jLogs + timeNode + ".log");
			fis.close();
			
			// 重新加载修改后的log4j配置文件
			PropertyConfigurator.configure(p);
			logger.info(webContentRoot + log4jLogs + timeNode + ".log");
		} catch (Exception e) {
			logger.info("重载log4j配置文件,设置日志文件名称出错");
		}
	}
}

上面的监听类中,每次启动容器时,用时间戳命名生成的日志文件,另外,将上下文对象ServletContext设置全局变量,在监听器初始化方法中初始化这个变量,这样整个项目可以直接调用这个对象。

 

容器启动结果,其中提示我没有指定文件名的名称和格式,这里没有关系,因为我们在代码中动态指定了:

还有生成的日志文件:

 

到此,一个简单的在web工程中使用log4j的Demo就完成了,这里我直接在监听中使用了log4j,没有写另外的测试类;

其中用到的jar包:

log4j.jar    : 还有一个commons-logging.jar,不过这里spring-web.jar也依赖了commons-logging这个jar

spring-web.jar   (创建log4j监听时需要),其他引入的spring系列的jar均为它的依赖jar包

如果使用maven工程的话,配置上面连个jar的依赖信息应该就可以了

 

如果发现某处出现错误的地方,请帮指出,麻烦在评论中给我留言,谢谢!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值