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.xml中配置log4j

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

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

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

  3. 在web项目中配置log4j

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

  4. Web.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. 教你用命令行激活win10系统

    对于笔者这样爱自己动手的电脑爱好者来说,当然会选择自己组装一台性价比高的台式电脑,一切都准备就绪了,系统也装好了,就差最后一步了--激活系统. 笔者真的很幸运,在网上找到了一些可以使用的密钥,我装的是 ...

  2. 1.7 理解dropout

    Dropout为什么有正则化的作用? 下面来直观理解一下. 上面讲到,dropout每次迭代都会让一部分神经元失活,这样使得神经网络会比原始的神经网络规模变小,因此采用一个较小神经网络好像和使用正则化 ...

  3. chrome浏览器再次打开黑屏一段时间

    打开chrome设置 最下面-显示高级设置 再拉到最下面-使用硬件加速模式(把勾去掉)

  4. 关于自定义view--实现自定义水波纹效果

    开发中的东西太多,怕自己忘记了,简单记录一下. 声明:此控件借鉴了大佬的想法,在此感谢大佬提供的支持,我只是把大佬的想法拿出来而已. ok,废话到此结束,看效果: 分析一下,我们可以看到,图中有两个圆 ...

  5. Python 装饰器示例

    #!/usr/bin/env python # _*_ coding: UTF-8 _*_ # Author:taoke def applePrice(func): def otherfunc(): ...

  6. [HNOI 2017]影魔

    Description 题库链接 给你一段长度为 \(n\) 的序列 \(K\) . \(m\) 组询问,每次给定左右端点 \(l,r\) .求出满足区间内下述贡献和. 如果一个区间的两个端点是这一个 ...

  7. ●BZOJ 4596 [Shoi2016]黑暗前的幻想乡

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4596 题解: 容斥,矩阵树定理,矩阵行列式 先说说容斥:(一共有 N-1个公司) 令 f[i ...

  8. ●Joyoi Easy

    题链: http://www.joyoi.cn/problem/tyvj-1952题解: 概率dp (先做的BZOJ 4318: OSU![本人题解],然后就感觉这个题很简单了) 令p[i]表示第i个 ...

  9. 【luogu P4007 清华集训2017】小Y和恐怖奴隶主

    题目背景 “A fight? Count me in!” 要打架了,算我一个. “Everyone, get in here!” 所有人,都过来! 题目描述 小 Y 是一个喜欢玩游戏的 OIer.一天 ...

  10. ●SPOJ 1811 Longest Common Substring

    题链: http://poj.org/problem?id=2774 题解: 求两个字符串(S,T)的最长公共子串.对 S串建后缀自动机.接下来就用这个自动机去求出能和 S串匹配的 T的每一个前缀的最 ...