在web应用中使用Log4j 2

时间:2021-07-17 08:54:05

Using Log4j 2 inWeb Applications

(在web应用中使用Log4j 2)

来源:http://logging.apache.org/log4j/2.x/manual/webapp.html

本文地址:http://blog.csdn.net/sushengmiyan/article/details/52390211

作者:苏生米沿

在JavaEE环境中使用log4j或者其它任何日志框架时,需要特别小心。当容器关闭或者应用程序卸载时日志资源的正常清除(数据库连接、文件流关闭等)是很重要的。由于web应用程序中类的加载特性,通过正常手段是不能清除Log4j资源的。Log4j必须在web应用部署的时候启动好,并且在应用程序卸载时要关闭掉。这种开关根据你应用程序是在Servlet3.0或者以上还是在servlet2.5中是区分的。

为了避免log4j的上述问题,当你引用log4j-web.jar的时候关闭钩子会自动禁用。

配置:

Log4j允许配置文件指定在web.xml中,使用log4jConfiguartion上下文参数。Log4j将会通过以下方式查找配置:

1.     如果有路径指定,那么它就会被搜索建立为servlet上下文资源。例如,如果log4jConfiguration包含了logging.xml,那么Log4j将会根据这个名字在web应用的root目录下查找文件。

2.     如果没有指定文件路径,log4j将会查找在WEB-INFO下以log4j2开头的文件。如果发现多个文件并且有一个是以应用名称命名的则使用该文件,否则,使用第一个查找到的。

3.     正常的搜索序列会再去查找classpath下和URLs定位到的配置文件。

Servlet3.0以及以上

一个servlet3.0及以上的web应用程序是指任何<web-app>的version是3.0或者更高的。当然,应用程序必须可以兼容在web容器中运行。比如有些:Tomcat7.0及更高,Glassfish3.0及更高,JBoss7.0及更高或者WebLogic12c及更高,WebSphere8.0及更高。

短故事

Log4j 2‘只工作在’servlet3.0或者更高的web应用中。它能够在应用程序启动时自动启动在应用关闭时自动卸载。多亏有servlet3.0中增加的ServletContainerInitializer API,相关联的Filter和ServletContextListener类可以在web应用中启动的时候动态的进行注册。

重要注意事项!考虑到性能问题,容器会自动把一些既定的jars忽略初始化,tomcat版本号小于7.0.43的会自动忽略log4j*.jar,导致上述特性不能正常工作,这个问题在7.0.43及以上版本中已经修复了。如果使用之前版本,请更改catalina.properties文件,并从jarsToSkip属性中将log4j*.jar移除,在其它容器中如果遇到类似事情,也需要做同样的事情。

Log4j2 Web JAR文件是一个web片段用来配置在其它web片段前的顺序。它包含了一个容器自动发现并初始化的ServletContainerInitializer(Log4jServletContainerInitializer),它将Log4jServletContextListener和Log4jServletFilter添加到ServletContext中。这些类初始化或者取消初始化Log4j的配置。

对于某些用户来说,自动启动Log4j是有问题的或者不受欢迎的。你可以使用isLog4jAutoInitializationDisabled参数来关闭自动启动。在web.xml中进行如下设置,即可自动取消启动。

<context-param>

       <param-name>isLog4jAutoInitializationDisabled</param-name>

       <param-value>true</param-value>

   </context-param>

一旦你禁止自动初始化,你必须像Servlet2.5 web程序中那样进行初始化操作。而且必须要在其它的框架启动之前启动。

Servlet 2.5 web程序

只要是<web-app>中的version版本是2.5不管是否是在servlet3.0容器环境中就是2.5web程序。注意log4j2不支持2.4及以下版本的web程序。

在2.5中,需要自己定义启动参数,并且需要注意,都要放在其它的定义之前。如下:

<listener>
        <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener<stener-class>
    <stener>
 
    <filter>
        <filter-name>log4jServletFilter</filter-name>
        <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>log4jServletFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>ERROR</dispatcher>
        <dispatcher>ASYNC</dispatcher><!-- Servlet 3.0 w/ disabled auto-initialization only; not supported in 2.5 -->
    </filter-mapping>

你可以使用Log4jContextName、Log4jConfiguration、isLog4jContextSeletorNamed参数自定义listener和filter的行为。

在web应用中使用Log4j 2的更多相关文章

  1. web&period;xml中配置log4j

    1.将 commons-logging.jar和 log4j.jar加入你的项目中:2.在src/下创建log4j.properties|log4j.xml文件:3.在web.xml中配置log4j的 ...

  2. 3&period;Web项目中使用Log4j实例

    转自:https://blog.csdn.net/luohai859/article/details/52250807 上面代码描述了Log4j的简单应用,其实使用Log4j也就是这样简单方便.当然除 ...

  3. 在web项目中配置log4j

    在web.xml中添加如下代码 <context-param> <param-name>contextConfigLocation</param-name> &lt ...

  4. Web&period;xml 中增加log4j

    配置文件例如以下.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app versio ...

  5. 在Spring项目中使用Log4j记录日志

    (1)引入log4j的jar包: 官网下载地址:http://logging.apache.org/log4j/1.2/download.html (2)在web.xml中添加log4j配置: 1 2 ...

  6. java web中使用log4j

    测试log4j的项目结构 Log4j.properties的路径为    src/config/log4j Log4j.properties文件的内容 下面定义日志输出级别是 INFO,并且配置了2个 ...

  7. 在java项目中使用log4j的实例

    测试log4j的项目结构 Log4j.properties的路径为    src/config/log4j Log4j.properties文件的内容 下面定义日志输出级别是 INFO,并且配置了2个 ...

  8. Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问

    本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这 ...

  9. 在JavaWeb中使用Log4j步骤

    在JavaWeb中使用Log4J指南.每次在开始写一个项目的时候都忘记Log4J如何配置.所以写个步骤,作为记录. 第一步 下载Log4J jar包 从Apache Logging Services ...

随机推荐

  1. MySql&colon; 常见sql语句

    1. show create table mysql> show create table t \G*************************** 1. row ************ ...

  2. javascript严格模式

    设立"严格模式"的目的,主要有以下几个: 1. 消除Javascript语法的一些不合理.不严谨之处,减少一些怪异行为; 2. 消除代码运行的一些不安全之处,保证代码运行的安全: ...

  3. 如何在maven中添加本地jar包

    mvn install:install-file -DgroupId=mytest-DartifactId=test-Dversion=1.1 -Dpackaging=jar -Dfile=d:\te ...

  4. div滚动条演示

    <!DOCTYPE html> <html> <head> <meta charset="gb2312" /> <title& ...

  5. 用Qt图形视图框架开发拼图游戏

    用Qt的图形视图框架(Graphics View Framework)做了一个拼图游戏DEMO,演示了: QGraphicsView.QGraphicsScene.QGraphicsItem的基本用法 ...

  6. javascript之处理Ajax错误

    使用Ajax须留心两类错误.它们的差别源于视角的不同. 第一类错误是从XMLHttpRequest对象的角度看到的问题:某些因素阻止了请求发送到server,比如DNS无法解析主机名,连接请求被拒绝. ...

  7. ASP&period;NET MVC Html&period;BeginForm用法1

    Html.BeginForm():该方法用于构建一个From表单的开始, 他的构造方法为:Html.BeginForm("ActionName","ControllerN ...

  8. 理解Java机制最受欢迎的8幅图

    原文链接:  Top 8 Diagrams for Understanding Java 翻译人员: 铁锚 翻译时间: 2013年10月29日 世间总是一图胜过千万言! 下面的8幅图来自于 Progr ...

  9. linux下查看进城(ps)的方法 与 杀死进程(kill)的N种方法

    PS查看进程 inux上进程有5种状态: 1. 运行(正在运行或在运行队列中等待) 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 3. 不可中断(收到信号不唤醒和不可运行, 进程必 ...

  10. java&lowbar;model&lowbar;dao&lowbar;自动生成&lowbar;generator-mybatis-generator-1&period;3&period;2 基于maven插件

    用mybatis原因很简单,易用,性能.是介于jdbc和hibernate之间的一个完美方案. 很简单: 1:配置pom <project xmlns="http://maven.ap ...