Spring的Log4J配置器Log4jWebConfigurer介绍
1. Logj4简介
Log4j是Apache大旗下的一个子项目,它可以用来重定向应用日志文件的输出流,无论我们想将日志文件输出到控制台还是网络还是其他地方,都可以通过logj4来配置,如果我们的应用里面引入的Spring框架技术,我们可以通过Spring来初始化logj4的配置文件信息,下面2,3节是对Spring文档的一些翻译第4节是作者自己对一些问题的看法:
2. Log4jWebConfigurer及主要配置参数
Log4jWebConfigurer是一个方便的自定义log4j web环境的初始化配置工具类,由spring util包提供,可以配置web应用的日志文件输出流路径,提供自动刷新检查的选项(这通常用于运行时日志配置的变更)。警告:假设一个展开的WAR包,同时会加载配置文件和写日志文件。如果你不想展开你的WAR包或者你不需要应用级别的日志文件存放在WAR目录,那么你就不要在应用中配置log4j(因此也不需要使用Log4jConfigListener或Log4jConfigServlet)。作为替代,你可以使用全局的,虚拟机范围的log4j的配置(例如在jBoss容器中),或者JDK1.4提供的java.util.logging(这是个全局工具)。
在Servet上下文级别支持三个初始化参数,通过web.xml中的context-param参数配置。
第一个参数:log4jCongLocation
指定logj4配置文件的位置,可以通过classpath配置(例如:classpath:myLog4j.properties),也可以通过绝对路径配置(如:C:/log4j.properties)或相对路径配置,/WEB-INF/log4j.properties。如果没有指定,默认的log4j初始化配置将会使用classpath路径下的log4j.properties或者log4j.xml文件。
第二个参数:log4jRefreshInterval
两次检查配置的时间间隔,单位是毫秒,如果没有配置刷新时间间隔,log4j将不会在运行时刷新配置,这将不会启动log4j的看门狗服务。
第三个参数:log4jExposeWebAppRoot
Web应用根系统属性是否被暴露,使得可以获得日志文件相对于web应用的根目录路径。默认值是”true”,可以设置为”false”来禁止暴露web应用的根系统属性。下面来看看详细的介绍,怎样使用这个系统属性来配置日志文件的路径。
注意:initLogging方法必须在使用log4j的其他spring组件启动之前调用,因此logj4的配置监听器在web.xml中的位置将会在spring其他组件启动监听器之前。
3. log4j配置看门狗服务
log4j的看门狗服务是由一个线程实现的,看门狗服务会异步的检查对应时间戳点的日志配置文件是否有变更,检查时间间隔参数来自用户的配置。同时要知道1000毫秒,也就是1秒中的检查时间间隔来检查日志级别的配置变更方案是不可行的,同时实际运行时检查时间间隔相对于配置也有一定的时间误差,请不要过分纠结。
警告::Logj4的看门狗服务线程将不会终止直到虚拟机进程停止。实际上,看门狗线程并不能通过LogManager来终止。因此,我们并不建议在j2ee应用的生产环境上使用配置文件刷新服务,如果不需要定时刷新配置文件的话看门狗服务就不会被唤醒,因为即使应用关闭,看门狗线程也不会被shutdown,这个时候有可能会造成资源泄露。
默认情况下,这个配置器会自动配置web应用的根系统目录,在日志文件配置中用${key}替代,也可以配置相对路径。默认的系统属性key是webapp.root,在log4j配置文件中像下面这样使用:log4j.appender.myfile.File=${webapp.root}/WEB-INF/demo.log
同时每个web应用应该指定一个唯一的web上下文参数webAppRootKey,例如:
"webAppRootKey = "demo.root”:
log4j.appender.myfile.File=${demo.root}/WEB-INF/demo.log
警告:一些容器,像tomcat这种,将不会为每个web应用保存一份独立的系统参数,因此你需要为每个web应用配置一个上下文参数webAppRootKey来避免冲突,其他应用像,Resin这种会自动隔离每个web应用的系统属性,,因此在这种容器中可以使用默认的webAppRootKey。
4. JVM级别的线程的一些问题
上面看门狗服务的介绍引出了一个问题,当我们需要使用看门狗服务来在运行时为我们刷新日志配置的时候也为应用埋下了一个隐患。举个例子,我们使用tomcat容器来运行我们的web应用,而我们web应用的线程依赖tomcat线程,这是由tomcat架构决定的,tomcat应用可以看做是一个依赖于虚拟机的进程。当一个web应用启动的时候开启了如看门狗这样的一个线程,这个线程只能在虚拟机进程关闭的时候才能够关shutdown,如果在线程中分配了一些资源,如在ThreadLocal中存储一些对象信息,这些内存迟迟得不到释放,即使在应用shutdown关闭的时候也一样,因为这个时候tomcat进程还在,虚拟机进程还在。一种做法就是在进程中去配置一个钩子点,在应用进程挂掉的时候来假shutdown掉这个线程,当然之所以我说“假”字,是因为我们不能回收一个线程资源,只能够清理掉线程引用的一些资源,至少这样能让内存回收工作交给垃圾回收器来处理,我们不能回收线程。之后线程会由tomcat回收利用,用于其他web应用的调度。
转自:https://www.tuicool.com/articles/nuUVZr
Spring的Log4J配置器Log4jWebConfigurer介绍的更多相关文章
- spring 集成 log4j 配置
在web.xml中增加如下代码: <context-param> <param-name>log4jConfigLocation</param-name> < ...
- Spring MVC - log4j 配置
http://blog.csdn.net/yhqbsand/article/details/8764388
- Log4j配置(转)
原文:http://www.blogjava.net/zJun/archive/2006/06/28/55511.html Log4J的配置文件(Configuration File)就是用来设置记录 ...
- Spring Boot自动配置原理与实践(一)
前言 Spring Boot众所周知是为了简化Spring的配置,省去XML的复杂化配置(虽然Spring官方推荐也使用Java配置)采用Java+Annotation方式配置.如下几个问题是我刚开始 ...
- Spring boot自定义拦截器和拦截器重定向配置简单介绍
大家好: 本文简单介绍一下用于权限控制的Spring boot拦截器配置,拦截器重定向问题. 开发工具:jdk1.8 idea2017(付费版,网上找的破解教程) 1,首先使用idea创建一个Sp ...
- Spring Cloud config之一:分布式配置中心入门介绍
Spring Cloud Config为服务端和客户端提供了分布式系统的外部化配置支持.配置服务器为各应用的所有环境提供了一个中心化的外部配置.它实现了对服务端和客户端对Spring Environm ...
- JAVA基础加强(张孝祥)_类加载器、分析代理类的作用与原理及AOP概念、分析JVM动态生成的类、实现类似Spring的可配置的AOP框架
1.类加载器 ·简要介绍什么是类加载器,和类加载器的作用 ·Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap,ExtClassLoader ...
- 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比
[原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...
- 8 -- 深入使用Spring -- 1...4 重写占位符配置器
8.1.5 重写占位符配置器 (PropertyOverrideConfigurer) PropertyOverrideConfigurer是Spring提供的另一个容器后处理器.PropertyOv ...
随机推荐
- jsp下载文件的实现方法及注意事项 (转)
jsp中实现文件下载,最简单的方式是在网页上做超级链接,如:<a href="music/abc.mp3">点击下载</a>. 但是,这样服务器上的目录资源 ...
- JS_高程6.面向对象的程序设计(2)创建对象_3 构造函数存在的问题
# 上次讲到用构造函数的模式来创建对象,相对于工厂模式,解决可对象识别的问题. function Person(name,age,job){ this.name=name; this.age=age; ...
- 11 week blog
Obtaining the JSON: 1.首先,我们将把要检索的JSON的URL存储在变量中. 2.要创建请求,我们需要使用new关键字从XMLHttpRequest构造函数创建一个新的请求对象实例 ...
- [原创]Studio 3T mogodb数据库工具使用介绍
[原创]Studio 3T mogodb数据库工具使用介绍 1 Studio 3T 简介 Studio 3T是一款功能强大的mangodb工具,主要为用户提供网页设计.代码输入.编程管理.数据库编辑 ...
- 面向对象编程技术的总结和理解(c++)
目录树 1.继承 1.1 基类成员在派生类中的访问属性 1.2继承时导致的二义性 1.3 多基继承 2.虚函数的多态 2.1虚函数的定义 2.2派生类中可以根据需要对虚函数进行重定义 2.3 虚函数的 ...
- hadoop ha 读取 activce状态的活动节点
方式一 package com.xxx.hadoop; import com.sun.demo.jvmti.hprof.Tracker; import com.sun.xml.bind.util.Wh ...
- 遇到一个git branch很奇怪的问题
最近,同事做了一个自动化的打包平台,但我发现里面的分支竟然有重复的,还有一些已经删除的branch. 比如,我已经删除了一个 test分支,在工程 game 目录下(已输入 git pull),输入: ...
- 关于Django Ajax CSRF 认证
CSRF(Cross-site request forgery跨站请求伪造,也被称为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的 ...
- python pip 安装包报 编码问题
好久不玩 TF 了, 今天尝试了一个案例,发现要安装module , 就搞了一下, 发现要先安装 base , 安装过程有遇到好多问题, 就写写, 将其中解决过程记录下来. 1. 保存,编码问题 Un ...
- webstorm11.0下载地址和webstorm11.0破解程序patcher.exe下载使用方法说明 前端IDE工具的利器
20160107以下亲测可行. webstorm11.0下载地址:http://www.fxxz.com/soft/109234.html webstorm11.0下载安装破解使用说明: 下载完Web ...