Log4j,实现加载自定义log4j.xml配置文件,并实现动态监听log4j.xml日志级别更新

在实际开发项目中,大部分产品的日志级别是ERROR级别的,因为这样可以提升系统运行效率,也可以防止INFO日志过多,日志文件很快被写满,以至于系统不能保存长时间的日志。进而造成定位问题不方便。

但是在ERROR级别下可能无法看到系统运行的详细日志信息。有时候需要查看INFO日志。所以最好有一种方法可以在系统运行过程中,动态修改日志级别。

实现动态修改日志级别,有两种办法:

1、利用Log4j提供的类和方法

2、自己实现监控log4j.xml文件更新,并实现动态配置更新。

一、利用Log4j提供的动态配置更新方法实现动态修改日志级别。

调用PropertyConfigurator或者DOMConfigurator类的configureAndWatch(String configFileName)或者configureAndWatch(String configFileName,long delay)

走读Log4j DOMConfigurator类configureAndWatch方法源码,发现只要是调用configureAndWatch()方法,Log4j就会启动一个线程,根据入参delay或者默认的1分钟时间周期扫描指定的log4j.xml文件的更新情况,如果发现有更新则重新加载log4j.xml配置。

代码示例:

import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;

/**
 * 
 */

/**
 * @author Administrator
 * 
 */
public class LogConfigurator
{
	private static Logger logger = Logger.getLogger(LogConfigurator.class);
	
	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		DOMConfigurator.configureAndWatch("d:\\log4j\\log4j.xml", 5000L);
		while (true)
		{
			try
			{
				logger.info("hello-Info");
				logger.debug("hello-Debug");
				logger.error("hello-Error");
				Thread.sleep(5000);
			}
			catch (Exception e)
			{
				e.printStackTrace();
			}
			
		}
	}
	
}

在D盘,Log4j文件夹下创建log4j.xml文件。内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

	<!-- 类似定义logger节点打印具体类,或某包中的指定级别以上日志 -->
	<logger name="LogConfigurator">
		<level value="info" />
		[color=red]
		<appender-ref ref="console" />
		[/color]
	</logger>

	<appender name="console" class="org.apache.log4j.ConsoleAppender">
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="[DomConfigurator Test][%d{ABSOLUTE}][%-5p][%m]%n" />
		</layout>
	</appender>

</log4j:configuration>

 

 运行LogConfigurator的main方法,并随时修改D:\log4j\log4j.xml文件中定义的日志级别。

<level value="info" />

观察控制台打印的日志级别。

猜你喜欢

转载自489291468.iteye.com/blog/1895471
今日推荐