欢迎和大家交流技术相关问题:
邮箱: jiangxinnju@163.com
博客园地址: http://www.cnblogs.com/jiangxinnju
GitHub地址: https://github.com/jiangxincode
知乎地址: https://www.zhihu.com/people/jiangxinnju

做一个产品或者项目,在测试时一般要打印详细的log,发布以后,因为打印日志会损失性能,所以通常在生产机上将log4j级别设置为最高,以提高效率,一旦客户那里出了问题,需要查看详细的日志信息来跟踪问题,此时打印日志就是很重要的事情。这就需要在应用开发不重启的情况下,动态切换log4j日志策略了。

目前有两种方式可以实现热切换Log4j级别配置,一是定时刷新log4j配置文件,二是调用setlevel()动态设置。

定时刷新log4j配置文件

使用log4j原生动态更新配置文件的方法

使用log4j自带的动态更新配置很简单,只要调用 PropertyConfigurator 或者 DOMConfigurator类的 configureAndWatch(String configFileName)或者 configureAndWatch(String configFileName, long delay)方法就可以了。其中configFileName值配置文件的路径加文件名,delay指扫描配置文件是否改变的间隔时间,默认值是 60 秒。在调用时log4j会创建一个线程,定时的去检查配置文件是否改变,如果改变的话就重新加载配置文件。需要注意的是在log4j中每调用一次configureAndWatch方法都会启动一个新的扫描线程,

实例代码参考:Log4jHotChangeWatchdog

使用触发方式更新配置文件

我们可以通过configureAndWatch方法来进行动态的改变log4j的配置,但是他采用了轮询方式来实现的,现在我们需要某种触发机制自己调用PropertyConfigurator对象的configure(String configFilename)方法重新加载log4j的配置。触发机制需要联系实际业务,如果是一个web应用,就通过页面来调用。如果是WebService应用,就使用开发的服务来调用。

实例代码参考:log4jReload.jsp

使用Spring定时更新配置文件

spring通过org.springframework.util. Log4jConfigListener实现运行时切换需求,Log4jConfigListener对log4j原生方法进行封装。默认情况是1分钟重新加载一次。

在web.xml文件中 配置 加载 log4j.properties的属性

<context-param>

<param-name>log4jConfigLocation</param-name>

<param-value>/WEB-INF/log4j.properties</param-value>

</context-param>

<context-param>

<param-name>log4jRefreshInterval</param-name>

<param-value>10000</param-value>

</context-param>

<listener>

<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>

</listener>

<!-- 为避免项目间冲突,定义唯一的 webAppRootKey -->

<context-param>

<param-name>webAppRootKey</param-name>

<param-value>scheduleProject</param-value>

</context-param>

①log4jConfigLocation 指定Spring从哪个目录下加载 log4j.properties 配置文件

②log4jRefreshInterval 当修改了配置文件时,不需要重启就能加载变化了的log4j.properties 配置文件

③webAppRootKey 项目的标识,一个窗口中可能部署了多个项目,用它进行区分。当配置日志文件的输出目录时,可能会用到它。

调用setlevel()动态设置

通过界面

通过自己做的web界面,客户在前台设置日志级别,后台调用logger.setlevel()来完成日志级别切换,但是这有个缺点,下次服务重启后,本次的日志级别调整持久保存下来。

实例代码参考:log4jHotChange.jsp

通过Spring+JMX方式

如果使用spring和jmx会很简单

实例代码参考:Log4jHotChangeMBean

本文所有实例代码见:https://bitbucket.org/jiangxincode/javawebtest

热切换Log4j级别配置的更多相关文章

  1. java log4j基本配置及日志级别配置详解

    java log4j日志级别配置详解 1.1 前言 说出来真是丢脸,最近被公司派到客户公司面试外包开发岗位,本来准备了什么redis.rabbitMQ.SSM框架的相关面试题以及自己做过的一些项目回顾 ...

  2. Mycat实现读写分离,主备热切换

    实验环境:ubutu server 14 Master IP:172.16.34.212 Slave IP:172.16.34.34.156 Mycat server IP:172.16.34.219 ...

  3. commons-logging和Log4j 日志管理/log4j.properties配置详解

    commons-logging和Log4j 日志管理 (zz) 什么要用日志(Log)? 这个……就不必说了吧. 为什么不用System.out.println()? 功能太弱:不易于控制.如果暂时不 ...

  4. springmvc 项目完整示例06 日志–log4j 参数详细解析 log4j如何配置

    Log4j由三个重要的组件构成: 日志信息的优先级 日志信息的输出目的地 日志信息的输出格式 日志信息的优先级从高到低有ERROR.WARN. INFO.DEBUG,分别用来指定这条日志信息的重要程度 ...

  5. Log4J实用配置指南

    转自:http://www.cnblogs.com/licheng/archive/2008/08/23/1274566.html 1         概述 本文档是针对Log4j日志工具的使用指南. ...

  6. Hibernate4搭建Log4J日志管理(附Log4j.properties配置详解)

    1.首先加入slf4j的jar包,即slf4j-api-1.6.1.jar 在hibernate官网下载hibernate-release-4.2.2.Final.zip并解压,在hibernate- ...

  7. java之log4j的配置

    java之log4j的配置 log4j有很多的优点,用起来很方便,就是配置起来有些麻烦,下面我介绍一下log4j的配置方法. log4j是用来记录日志的. 软件的运行过程离不开日志.日志主要用来记录系 ...

  8. Log4j.properties配置详细解读

    Log4j.properties配置 Log4j有三个主要的组件:Loggers(记录器),Appenders  (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以 ...

  9. java日志框架log4j详细配置及与slf4j联合使用教程

    最后更新于2017年02月09日 一.log4j基本用法 首先,配置log4j的jar,maven工程配置以下依赖,非maven工程从maven仓库下载jar添加到“build path” <d ...

随机推荐

  1. Chrome 33+ 自建 扩展 实现 custom.css

    http://bbs.kafan.cn/thread-1674386-1-2.html

  2. Java位向量的实现原理与巧妙应用

    Java位向量的巧实现原理与巧妙应用 1.博文介绍 本篇博文将会介绍几本的位运算含义.位向量介绍.BitSet实现原理.Java位向量的应用.拓展介绍Bloom Filter等. 2.位运算介绍 1) ...

  3. bzoj3531——树链剖分+动态开点线段树

    3531: [Sdoi2014]旅行 Time Limit: 20 Sec  Memory Limit: 512 MB Description S国有N个城市,编号从1到N.城市间用N-1条双向道路连 ...

  4. linux下处理excel里copy的某列的字符串,去除行末空格并添加特殊字段

    背景:从excel里copy出一列数据到txt,然后放到linux下处理,发现每一行末尾都是固定个数的空格,我想要在每行字符串末尾加固定字段并逗号隔开输出, 1.将特定字段取出,去掉每行末尾的不定个数 ...

  5. 自动化利器-RPM自定义打包

    1.Rpm打包程序 1.1为什么要使用rpm打包 1.编译安装软件,优点是可以定制化安装目录.按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长. 2.yum安 ...

  6. Object-C定时器,封装GCD定时器的必要性!!! (一)

    实际项目开发中经常会遇到延迟某件任务的执行,或者让某件任务周期性的执行.然后也会在某些时候需要取消掉之前延迟执行的任务. iOS中延迟操作有三种解决方案: 1.NSObject的方法:(对象方法) p ...

  7. 搭建ubuntu版hadoop集群

    用到的工具:VMware.hadoop-2.7.2.tar.jdk-8u65-linux-x64.tar.ubuntu-16.04-desktop-amd64.iso 1.  在VMware上安装ub ...

  8. [转]使用sklearn进行集成学习——理论

    转:http://www.cnblogs.com/jasonfreak/p/5657196.html 目录 1 前言2 集成学习是什么?3 偏差和方差 3.1 模型的偏差和方差是什么? 3.2 bag ...

  9. EM最大期望算法-走读

    打算抽时间走读一些算法,尽量通俗的记录下面,希望帮助需要的同学.   overview: 基本思想:      通过初始化参数P1,P2,推断出隐变量Z的概率分布(E步):      通过隐变量Z的概 ...

  10. 第三人称角色移动及自由移动视野(RigidBody实现)

    重点:向量的运算.在获得水平及垂直方向的速度之后,将方向进行重设,让方向与视野同步(即:相机的方向与人物方向相同) 下面以一个实例来说明如何操作: 1.如图创建一个地形(Terrain),两个正方体( ...