利用 Spring 与 Log4J 巧妙地进行动态日志配置切换并立即生效

  引言:

    在开发与生产环境中,我们有时候需要对日志的配置进行动态切换,要调试、监控和检查系统的运行时信息。    一般有两种方法

    1、通过 Spring 的 Log4jConfigListener 在启动时开启定时器进行定时加载配置文件

    2、通过 JMX 动态控制

    以上可以从我的《利用Spring来管理控制自己的应用程序》专题演讲资料中获取到更加详细的信息,包括示例的源程序,地址为

    http://yulimin.javaeye.com/blog/52354

   先说一下上面两种方法的不同与缺点:

    1、通过 Spring 的 Log4jConfigListener,则必须在后台打开线程,现定时扫描,然后来定时工作,有点浪费;

    2、通过 JMX 动态控制的则必须供一个管理的端口,不仅有可能端口被占用(当然有个 workaround 来解决它),还有存在防火墙等等需要配置这个管理端口进行对外暴露等等。

    虽然上述两种方法存在着一些不足,但是这两种方法在特定的场合下,都可以很好地来利用它进行完美地工作。

    现在,利用它进行封装与扩展,我们可以巧妙地进行定制,并通过 Web Console 界面来更方便地进行动态切换配置信息,而且不需要重新启动正在运行中的应用程序。

    文章发表于中国IT实验室,全文请见:

    http://java.chinaitlab.com/Spring/749699.html

    文中代码下载在这里提供下载:

    http://yulimin.javaeye.com/blog/200620  

 

时间: 2024-10-03 23:44:51

利用 Spring 与 Log4J 巧妙地进行动态日志配置切换并立即生效的相关文章

利用Spring框架改进J2EE编程

j2ee|编程 摘要 J2EE编程正在变得越来越复杂.J2EE已经发展为一个API.复杂化的编程和配置的复杂网络.为了应对这种复杂性,新的框架和方法不断涌现.这些框架高度依赖于一个称为IoC(Inversion of Control,反向控制)的概念.本文将探讨这种方法的一些特性和优点,因为这种方法与J2EE编程相关,而且可以使J2EE编程变得更轻松. 简介 马克·吐温的一句话常被引用:"--关于我死亡的报道是一种夸张."现在已经出现了很多关于.Net的流言,以及认为J2EE API的

利用Spring AOP记录方法的执行时间_java

一.前言 对于spring aop这个我就不多介绍了,网上一搜一大把,使用过spring的人都知道spring的ioc和aop.ioc我们常用,但在我们自己的系统中,aop的使用几乎为零,除了这个监控的小功能应用到了,其他的基本上没有使用到.下面小编就给大家整理下利用Spring AOP记录方法执行时间的解决方案,有需要的一起看看吧. 二.解决方案 1.传统方法 最简单.粗暴的方法是给各个需要统计的方法开始和结尾处加的时间戳,然后差值计算结果即可,代码如下: long startTime = S

利用 Spring Boot 在 Docker 中运行 Hadoop

本文讲的是利用 Spring Boot 在 Docker 中运行 Hadoop,[编者的话]Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.本文介绍了如何利用Spring Boot在Docker中运行Hadoop任务. 简介 越来越多的应用都开始使用Hadoop框架.而开发者在使用过程中也遇到一些挑战,比如使用诸如Docker之类的容器开发和部署相关的技术栈开发的应用.我们将会在下面的例子中介绍如何克服这些挑战. 由于 S

利用Spring随时随地获得Request和Session

利用Spring随时随地获得Request和Session 一.准备工作:   在web.xml中添加     <listener> <listener-class> org.springframework.web.context.request.RequestContextListener </listener-class> </listener>   二.使用方法:  1.方法一:通过代码实现  HttpServletRequest request =

aop-描述一下怎么利用spring AOP实现权限控制

问题描述 描述一下怎么利用spring AOP实现权限控制 只用描述就可以.不用代码,谢谢啦 解决方案 利用spring aop实现数据源的切换 解决方案二: 简单来说,就是你统一写好权限判断的代码,然后spring会自动在调用你的业务方法之前,执行这段代码,并且根据你的返回决定是否真的执行业务.这样你的权限代码只用在一个地方写一次就可以了. 解决方案三: 权限控制 有两种方式,第一种:自己写个拦截器实现权限控制:第二种使用spring AOP实现权限控制,这个最好采用自定义注解的方式实现,你自

spring task 实现实现定时任务:动态暂停 恢复 修改和删除任务

问题描述 spring task 实现实现定时任务:动态暂停 恢复 修改和删除任务 以前是用spring+quartz的方式实现的定时任务:动态暂停 恢复 修改和删除任务. 但是在spring3以后,spring自己的task包,能实现轻量级的定时任务. 项目决定不用quartz,只用spring自带的包,完成这个任务. 我搜索了资料,发现很少有这方面的资料.求叫大神们,只用spring怎么实现以上要求. 解决方案 实现了没有啊,我很想知道的啊?

利用Spring IOC技术实现用户登录验证机制_java

利用 Spring IOC 技术实现用户登录的验证机制,对用户进行登录验证. 首先利用 Spring 的自动装配模式将 User 对象注入到控制器中,然后将用户输入的用户名和密码与系统中限定的合法用户的用户名和密码进行匹配. 当用户名与密码匹配成功时,跳转到登录成功页面:当用户名与密码不匹配时,跳转到登录失败的页面. 1.创建 User 对象,定义用户名和密码属性,代码如下: package com.importnew; public class User { private String us

利用spring进行简化测试(JUNIT)

下午复习了一点关于spring简化测试方面的内容,比较感兴趣,就记录下来啦,毕竟记下东西以后可以来看看的,记忆力不总是很好的,但写的东西可以当作复习资料来看看的. 利用spring的mock类进行单元测试:    spring框架提供了大量测试的mock类,包括与jndi,porlet,web应用相关的mock类.尤其是web应用相关的mock类,可以大大提高web组件测试的方便性. 打开spring的下载包的mock文件夹(路径...mock/org/springframework/mock/

利用Spring来进行集成测试

利用spring来进行集成测试: 1.AbstractSpringContextTests类[1],该类全部方法是protected的,通常不使用这个类,而使用它的子类们. 2.AbstractDependencyInjectionSpringContextTests类[2]:继承于类[1]:名字N长的.如果仅仅使用Spring依赖注入功能,可以让测试用例继承该类. 3.AbstractTransactionalSpringContextTests类[3]:继承于类[2],继承该类的测试用例在s