VJS*_*VJS 1 java logging log4j jakarta-ee
在我现有的应用程序“ org.apache.log4j ”中,API 已在 Java 代码中使用。
要求 :
在任何情况下,我都必须在日志文件中记录一些语句(比如 xyz),并且不应该依赖于日志级别。例如:如果我的日志级别是错误,那么 xyz 也应该打印,如果我的日志级别是调试,那么 xyz 也应该打印。
我无法将 xyz 的日志语句设置为调试,因为如果我这样做,除了 xyz 之外的其他日志语句也将开始打印。
为此,我相信,我必须添加一些自定义日志级别。请帮助如何做到这一点以及如何设置其级别排序,以便在任何情况下都应该打印。
提前致谢。此致
您可以“劫持”受保护的方法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)
如何添加自定义级别?
这是可能的,但很少合适。该请求通常针对名为“审核”之类的级别,该级别显然不适合“跟踪”、“调试”、“信息”、“警告”、“错误”和“致命”进程。在这种情况下,对级别的请求实际上是对指定不同受众的机制的请求。适当的机制是对“审核”相关消息使用不同的记录器名称(或树)。
因此,如果您想接受该建议,那么您应该查看SJuan76的答案。