log4j在web工程中的一个简单实例
程序员文章站
2022-05-24 15:28:01
...
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的依赖信息应该就可以了
如果发现某处出现错误的地方,请帮指出,麻烦在评论中给我留言,谢谢!
上一篇: log4j自定义日志
推荐阅读
-
iOS开发中实现一个简单的图片浏览器的实例讲解
-
在ASP.NET Core中实现一个Token base的身份认证实例
-
在Word2000中创建Web页的简单目录
-
在CDR中绘制一个简单的图形
-
php和数据库结合的一个简单的web实例 代码分析 (php初学者)
-
HTML5中的Web Storage(sessionStorage||localStorage)理解与简单实例
-
Websphere Application Server (WAS) 中应用的哪一个 web.xml 在起作用 WebXMLWebsphere应用服务器Tomcat
-
Websphere Application Server (WAS) 中应用的哪一个 web.xml 在起作用 WebXMLWebsphere应用服务器Tomcat
-
一个简单的for循环,在Opencl中如何实现呢
-
nodejs开发一个最简单的web服务器实例讲解