文档章节

Java web application 初始化log4j

JavaSon712
 JavaSon712
发布于 2017/06/03 14:16
字数 670
阅读 32
收藏 0

Java web 应运中,一般情况下,只需将log4j的配置文件** log4j.properties**或者 **log4j.xml**放置在web的根目录下(WEB-INF\classes ),我们就可以便捷的以如下方式使用_log4j_:

Logger logger = Logger.getLogger(MyServlet.class);
logger.debug("this is a debug log message");

如果将_log4j_的配置文件,放置在web 应用的其它目录下,则需要显示的以如下方式初始化_log4j_:

String log4jConfigFile = "some/path/log4j.properties";
PropertyConfigurator.configure(log4jConfigFile);

这种初始化方式只会在web应运启动的时候执行一次,推荐的方法是实现_ServletContextListener接口,在contextInitialized()_事件中实现初始化:

public class ContextListener implements ServletContextListener {
 
    @Override
    public void contextInitialized(ServletContextEvent event) {
        // code to initialize log4j here...
    }
}

以下是在_Java Web应用程序中初始化和使用log4j_的步骤:

1. 创建 _log4j.properties_文件

# LOG4J configuration
log4j.rootLogger=DEBUG, Appender1,Appender2
 
log4j.appender.Appender1=org.apache.log4j.ConsoleAppender
log4j.appender.Appender1.layout=org.apache.log4j.PatternLayout
log4j.appender.Appender1.layout.ConversionPattern=%-7p %d [%t] %c %x - %m%n
 
log4j.appender.Appender2=org.apache.log4j.FileAppender
log4j.appender.Appender2.File=D:/Logs/Log4jWebDemo.log
log4j.appender.Appender2.layout=org.apache.log4j.PatternLayout
log4j.appender.Appender2.layout.ConversionPattern=%-7p %d [%t] %c %x - %m%n

该配置文件创建了两个基本的 appender,第一个是_ConsoleAppender,第二个FileAppender_(日志记录将会输出至 D:/Logs/Log4jWebDemo.log)

将_log4j.properties_放在 _WEB-INF_下

2.在web.xml文件里配置log4j.properties文件位置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
     
    <display-name>Log4jWebDemo1</display-name>
     
    <context-param>
        <param-name>log4j-config-location</param-name>
        <param-value>WEB-INF/log4j.properties</param-value>
    </context-param>
     
</web-app>

3.实现ServletContextListener接口

用如下代码创建一个实现了**ServletContextListener** 接口的类**ContextListener**

package net.codejava.servlet;
 
import java.io.File;
 
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
 
import org.apache.log4j.PropertyConfigurator;
 
@WebListener("application context listener")
public class ContextListener implements ServletContextListener {
 
    /**
     * Initialize log4j when the application is being started
     */
    @Override
    public void contextInitialized(ServletContextEvent event) {
        // initialize log4j here
        ServletContext context = event.getServletContext();
        String log4jConfigFile = context.getInitParameter("log4j-config-location");
        String fullPath = context.getRealPath("") + File.separator + log4jConfigFile;
         
        PropertyConfigurator.configure(fullPath);
         
    }
     
    @Override
    public void contextDestroyed(ServletContextEvent event) {
        // do nothing
    }  
}

在_contextInitialized()_方法中,我们读取并构建了**log4j.properties绝对路径,使用 PropertyConfigurator.configure() 对log4j用指定的properties**文件进行了初始化。

note:

Servlet 3.0 才支持** @WebListener注解,如果你使用的是Servlet 2.5**,请在web.xml中使用如下等价的配置:

<listener>
    <listener-class>net.codejava.servlet.ContextListener</listener-class>
</listener>

4.创建一个测试类

package net.codejava.servlet;
 
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.apache.log4j.Logger;
 
@WebServlet("/test")
public class TestLog4jServlet extends HttpServlet {
 
    static final Logger LOGGER = Logger.getLogger(TestLog4jServlet.class);
             
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
         
        LOGGER.info("This is a logging statement from log4j");
         
        String html = "<html><h2>Log4j has been initialized successfully!</h2></html>";
        response.getWriter().println(html);
    }
 
}

同样如果你的web不支持Servlet 3.0,请在web.xml加入如下等价的配置:

<servlet>
    <display-name>TestServlet</display-name>
    <servlet-name>TestServlet</servlet-name>
    <servlet-class>net.codejava.servlet.TestLog4jServlet</servlet-class>
</servlet>
 
<servlet-mapping>
    <servlet-name>TestServlet</servlet-name>
    <url-pattern>/test</url-pattern>
</servlet-mapping>

5. 测试

启动web应用输入如下地址:

http://localhost:8080/Log4jWebDemo1/test

可以在控制台和** D:/Logs**下看到相关日志的输出

本文转载自:http://www.codejava.net/coding/how-to-initialize-log4j-for-java-web-application

共有 人打赏支持
JavaSon712
粉丝 10
博文 153
码字总数 26368
作品 0
延安
程序员
JMX学习以及在log4j中的应用

前言 JMX即Java Managemen Extensions,是一个为应用程序植入管理功能的框架。一套标准的代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和服务实现管理。 常常在编程的过程中...

buglife
2015/01/06
0
15
hibenate中log4j.properties文件添加到eclipse中

Hibernate用log4j包来做日志输出,这就要求项目中创建一个log4j的配置文件log4j.properties,否则有些运行日志就无法看到(不会影响程序运行),另外Eclipse控制台视图会输出如下两条警告信息...

闵开慧
2014/06/11
0
0
java web项目使用log4j的使用笔记

新建一个JAVA WEB 项目,就是一个动态网站。 例名字为sms (一)去http://logging.apache.org/log4j/1.2/下载log4j版本。 把log4j-1.2.17.jar放到WEB-INF/lib目录下 (二)java源码目录下的s...

独钓渔
2015/10/26
0
0
Apache LOG4J 2.11.0 发布,Java 日志组件

Apache Log4j 是一个众所周知的用于记录应用程序行为的框架。 Log4j 2是对Log4j的升级,可提供重大改进,超越其前身Log4j 1.x,并提供许多其他现代功能 ,例如对标记的支持,使用查找的属性替...

周其
03/18
0
3
比较 SLF4J 与 log4j

SLF4J :JAVA简易日志门面(Simple Logging Facade for Java,缩写SLF4J) 他是一套包装Logging 框架的接口程式,以外观模式实现。可在软件部署的时候决定要使用的 Logging 框架,目前主要支援...

Candy_Desire
2014/03/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

SharedPreferences 的使用,commit和apply两个方法的区别

SharedPreferences sp = getSharedPreferences("config",MODE_PRIVATE); //第一个参数:存储文件的名称,第二个参数文件的访问权限,通常MODE_PRIVATE是私有存储 sp.edit().putString("USERNAM...

lanyu96
24分钟前
1
0
02-《Apache Tomcat 9 User Guide》之简介

1.Introduction - 介绍 For administrators and web developers alike, there are some important bits of information you should familiarize yourself with before starting out. This d......

飞鱼说编程
28分钟前
1
0
关于maven的使用,这一篇基本就够了

2.1 关于maven 每一个工具的出现都有其历史意义,而Maven的出现则是开发者对于不同的项目都要有自己的Ant构建文件,而这些文件都各不相同,而且JAR被检入CVS(Concurrent Version System),...

小小明童鞋
30分钟前
16
0
从xtrabackup完整备份恢复单个innodb表

现在大多数同学在线上采取的备份策略都是xtrabackup全备+binlog备份,那么当某天某张表意外的删除那么如何从xtrabackup全备中恢复呢?从mysql 5.6版本开始,支持可移动表空间(Transportable...

IT--小哥
35分钟前
1
0
百度AI攻城狮,用TensorFlow API训练目标检测模型(浣熊超可爱)

今天,人工智能正影响我们生产、生活的方方面面。10月10日,为期三天的2018华为全联接大会在上海拉开帷幕,此次大会以“+智能,见未来”为主题,发布了AI战略及全球领先的全栈全场景AI解决方...

Python唱情歌
35分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部