自定义日志级别

VJS*_*VJS 1 java logging log4j jakarta-ee

在我现有的应用程序“ org.apache.log4j ”中,API 已在 Java 代码中使用。

要求 :

在任何情况下,我都必须在日志文件中记录一些语句(比如 xyz),并且不应该依赖于日志级别。例如:如果我的日志级别是错误,那么 xyz 也应该打印,如果我的日志级别是调试,那么 xyz 也应该打印。

我无法将 xyz 的日志语句设置为调试,因为如果我这样做,除了 xyz 之外的其他日志语句也将开始打印。

为此,我相信,我必须添加一些自定义日志级别。请帮助如何做到这一点以及如何设置其级别排序,以便在任何情况下都应该打印。

提前致谢。此致

mab*_*aba 5

您可以“劫持”受保护的方法Logger#forcedLog()以始终打印到日志。

您必须将劫持者类放在与 相同的包中Logger

package org.apache.log4j;

/**
 * @author maba, 2012-08-23
 */
public class LogOverride {
    public static void print(Logger logger, String message) {
        logger.forcedLog(logger.getName(), Priority.INFO, message, null);
    }
}
Run Code Online (Sandbox Code Playgroud)

从你的调用代码

log.setLevel(Level.OFF); // Make sure logging is turned off
log.info("Normal logging"); // Will not be seen anywhere
LogOverride.print(log, "Overriding logger"); // Will still make it to your appender
Run Code Online (Sandbox Code Playgroud)

这是 log4j FAQ 关于自定义级别的说法:

如何添加自定义级别?

这是可能的,但很少合适。该请求通常针对名为“审核”之类的级别,该级别显然不适合“跟踪”、“调试”、“信息”、“警告”、“错误”和“致命”进程。在这种情况下,对级别的请求实际上是对指定不同受众的机制的请求。适当的机制是对“审核”相关消息使用不同的记录器名称(或树)。

因此,如果您想接受该建议,那么您应该查看SJuan76的答案。