log4j 将 Appender 限制在特定级别

log4j limit Appender to a specific Level

我正在尝试以编程方式配置 Log4j。我正在尝试将几个附加程序添加到级别设置为 ALL 的记录器。 也没有其他附加程序(我使用了 removeallAppenders)。

但是当我在信息级别和警告级别调用记录器时,我感到很惊讶 我有 2 个输出。 我需要的只是我在 appender 中配置的打印级别。

这是我使用的一些代码:

    LoggerFactory loggerr = new LoggerFactory("myLoggerName","","");

    logger.removeAllAppenders();
    ConsoleAppender caWarn = new ConsoleAppender();
    caWarn.setLayout(layout);
    caWarn.setName("warnconsole");
    caWarn.setThreshold(Level.INFO);
    caWarn.activateOptions();
    logger.addAppender(caWarn);

    loggerr.info("infooo");
    loggerr.warn("warning");

如何只打印信息日志?

正如@Fildor 所说,我通过使用 Appender 过滤器解决了这个问题。

过滤器接受三个选项 LevelMinLevelMaxAcceptOnMatch.

我将每个 appender 限制在我想要的级别,这可能很乏味,但仍然是我发现以编程方式进行的唯一响应和解决方案

    ConsoleAppender caInfo = new ConsoleAppender();
    caInfo.setName("infoConsole");
    caInfo.setThreshold(Level.DEBUG);
    layout.setConversionPattern("%-5p %d [%t] %c %x - %m%n");
    caInfo.setLayout(layout);
    LevelRangeFilter lrf = new LevelRangeFilter();
    lrf.setLevelMax(Level.DEBUG);
    lrf.setLevelMin(Level.DEBUG);
    caInfo.addFilter(lrf);
    caInfo.activateOptions();
    logger.addAppender(caInfo);