欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-24 15:28:01
...

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

工程结构:

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

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设置全局变量,在监听器初始化方法中初始化这个变量,这样整个项目可以直接调用这个对象。

 

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

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

还有生成的日志文件:

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

 

到此,一个简单的在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的依赖信息应该就可以了

 

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

相关标签: log4j