Log4j 动态更新配置文件【热配置】

由于项目要求Log4j需要支持热配置,研究了一下Log4j中实现修改配置文件后实时生效的方法,考虑到效率问题,最后采用了第二种方法,以下是具体实现实例:

一.使用log4j自带的动态更新配置文件【轮询方式来实现】:
主要调用 PropertyConfigurator 或者 DOMConfigurator类的 configureAndWatch(String configFileName)或者 configureAndWatch(String configFileName, long delay)来实现。
[b]
注意:在log4j中每调用一次configureAndWatch方法都会启动一个新的扫描线程。
[/b]


public class TestLog4j
{
public static Logger logger = Logger.getLogger(TestLog4j.class);
static
{
PropertyConfigurator.configureAndWatch("./log4j.properties", 60000);
}
public static void printLog()
{
if (logger.isDebugEnabled())
{
logger.debug("debug!!");
}
if (logger.isInfoEnabled())
{
logger.info("info!!");
}
logger.error("error!!");
}
public static void main(String[] args)
{
while (!Thread.interrupted())
{
TestLog4j.printLog();
try
{
Thread.sleep(1000);
} catch (InterruptedException e)
{
}
}
}
}



二.事件触发方式实现:
调用PropertyConfigurator对象或DOMConfigurator对象的configure(String configFilename)方法。


import org.apache.log4j.xml.DOMConfigurator;

public class TestLog4j
{


/**
*
* Description:reload Log4j.xml<br>
*
*/
private void reloadLog4jConfig(String filePaht)
{
DOMConfigurator.configure(filePath);//加载.xml文件
}

/**
* Description:<br>
*
* @param args
*/
public static void main(String[] args)
{
TestLog4j test = new TestLog4j();
String filePaht = "src/test/resources/log4j.xml";
test.reloadLog4jConfig(filePaht);
}

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是一个简单的log4j的XML配置文件例子: ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> <param name="Target" value="System.out"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/> </layout> </appender> <appender name="FILE" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="logs/mylog.log"/> <param name="Append" value="true"/> <param name="MaxFileSize" value="10MB"/> <param name="MaxBackupIndex" value="10"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/> </layout> </appender> <logger name="com.mycompany"> <level value="INFO"/> <appender-ref ref="FILE"/> </logger> <root> <level value="ERROR"/> <appender-ref ref="CONSOLE"/> </root> </log4j:configuration> ``` 在这个例子中,我们定义了两个appender:CONSOLE和FILE。CONSOLE是一个ConsoleAppender,将日志输出到控制台上;FILE是一个RollingFileAppender,将日志输出到logs/mylog.log文件中。我们还定义了两个logger:com.mycompany和root。com.mycompany的日志级别设置为INFO,将日志输出到FILE中;root的日志级别设置为ERROR,将日志输出到CONSOLE中。 这个配置文件使用了log4j.dtd,用于指定DTD及其命名空间。DTD是一种XML文档类型定义,它定义了XML文档中允许出现的元素、属性和实体,以及它们之间的关系。 ### 回答2: log4j的XML配置文件是用于配置log4j日志框架的关键文件之一。通过该文件,我们可以定义日志的输出格式、输出级别、输出目标等。 XML配置文件中的关键元素包括: 1. `<log4j:configuration>`:配置文件的根元素,表示一个log4j配置文件。 2. `<appender>`:定义将日志信息发送到哪个目标,比如文件、控制台等。可以配置多个appender。 3. `<layout>`:定义日志的输出格式,如时间、日志级别、类名、消息等。常用的layout有`PatternLayout`和`SimpleLayout`。 4. `<root>`:定义根Logger的输出级别和appender。根Logger是所有Logger的父Logger,可以定义全局的输出级别和appender。 5. `<logger>`:定义特定包或类的Logger的输出级别和appender。 在XML配置文件中,我们可以通过配置不同元素的属性来实现对日志的灵活配置。比如可以通过设置`threshold`属性来指定输出级别,通过设置`file`属性来指定日志输出到文件等。 一个简单的log4j的XML配置文件示例如下: ```xml <?xml version="1.0" encoding="UTF-8"?> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /> </layout> </appender> <root> <priority value="DEBUG" /> <appender-ref ref="CONSOLE" /> </root> </log4j:configuration> ``` 以上配置定义了一个名为`CONSOLE`的appender,将日志输出到控制台,并使用`PatternLayout`作为输出格式。根Logger的输出级别为DEBUG,并将日志输出到`CONSOLE` appender中。 通过灵活配置log4j的XML配置文件,我们可以根据实际需求定义日志的格式和输出目标,从而更好地进行日志管理和排查问题。 ### 回答3: log4j是一个开源的Java日志管理工具,用于记录应用程序的日志信息。XML配置文件log4j的一种配置方式,用于指定日志输出的格式、位置和级别等信息。 XML配置文件的结构主要包括根元素<log4j:configuration>和子元素<appender>、<logger>等。 <log4j:configuration>元素是XML配置文件的根元素,包含了整个配置的信息。它可以包含多个<appender>和<logger>。 <appender>元素用于定义日志记录的输出目标。它可以定义不同的输出方式,如控制台输出、文件输出等。每个<appender>元素都有一个唯一的名称,并可以通过<appender-ref>元素来引用。 <logger>元素用于定义应用程序的日志记录器。每个<logger>元素都有一个唯一的名称和一个级别。可以使用<appender-ref>元素将<logger>元素与<appender>元素关联起来,以将日志信息写入指定的输出目标。 XML配置文件还可以定义日志级别、日志格式等信息。日志级别包括DEBUG、INFO、WARN、ERROR和FATAL等,可以根据不同的需求进行设置。日志格式可以使用PatternLayout指定,包括日期、日志级别、类名、线程名等信息。 通过修改XML配置文件,可以方便地调整日志的输出方式和级别,使程序的日志信息更易读、更易管理。同时,XML配置文件的结构清晰,易于理解和维护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值