Log4j通知日志记录级别更改

时间:2010-12-01 12:54:31

标签: java log4j

无论如何,或者log4j中的任何配置告诉他在发生某些“日志记录级别”配置时记录一行?

我的意思是有人将调试级别从INFO更改为DEBUG,我希望log4j记录该事件。

由于

4 个答案:

答案 0 :(得分:1)

我不确定是不是你的情况,但是如果你使用configureAndWatch重新加载配置文件,你应该能够看到设置系统属性-Dlog4j.debug=true所需的信息。

请参阅 http://logging.apache.org/log4j/1.2/apidocs/index.html?org/apache/log4j/xml/DOMConfigurator.html

答案 1 :(得分:0)

LogLog是Log4J的自记录。我从来没有使用它,但如果解决方案存在它就在那里。我建议你下载log4j的源代码并尝试调查它“知道”日志级别正在被更改的地方。一旦找到代码,就会看到它是否打印出自我记录的内容并根据需要进行配置。

如果您能找到更具体的答案,我会感激不尽。祝好运。

答案 2 :(得分:0)

在运行时,如果你的应用程序中有一个servlet,jsp或屏幕,你可以在其中更改日志级别,你很可能会做这样的事情

public void changeLogLevel(String className, String logLevel){
    Logger logger = Logger.getLogger(className);
    Level level = Level.toLevel(logLevel);
    logger.setLevel(level);
}

为了记录此事件,您只需为此事件添加额外的记录器语句

private static Logger classLogger = Logger.getLogger(ThisClass.class);
public void changeLogLevel(String className, String logLevel){
    Logger logger = Logger.getLogger(className);
    Level level = Level.toLevel(logLevel);
    logger.setLevel(level);
    classLogger.debug("The Level of " + className + " has changed to " + logLevel);
}

然后,每次发生日志级别时,都可以在此处记录。如果您想获得想象力,只需将此日志发送到自己的文件即可。您可能希望进一步推进该方法,以包括更改日志级别的用户的IP /用户名。

如果您可以控制您的应用程序,请确保这是用户可以更改日志记录级别的应用程序中的唯一点。

答案 3 :(得分:0)

这不能回答你的问题,但是内置的java.util.logging.LogManager实现有一个addPropertyChangeListener()方法,可以完全按照你想要的方式执行。

我在Log4J中找不到任何可比的东西,但我看起来并不那么难......