在Log4J中,以编程方式添加过滤器不起作用。虽然我们可以通过属性文件添加多个过滤器

在Log4J中,以编程方式添加过滤器不起作用。虽然我们可以通过属性文件添加多个过滤器,log4j,log4js-node,Log4j,Log4js Node,我使用的是log4j1.2.17 我需要以编程方式添加过滤器。我正在使用log4japi中的StringMatchFilter。但它们似乎不起作用。当我添加log4j.properties文件时,多个过滤器工作,我能够抑制日志 代码如下: package logging; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.log4j.Con

我使用的是log4j1.2.17

我需要以编程方式添加过滤器。我正在使用log4japi中的StringMatchFilter。但它们似乎不起作用。当我添加log4j.properties文件时,多个过滤器工作,我能够抑制日志

代码如下:

package logging;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.varia.StringMatchFilter;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ProgrammaticallyAddingFilters {

  public static void main(String[] args) {

    /**
     * Related to FileAppenders
     */
    String APPN_LAYOUT_PATTERN = "%d{MM-dd@HH:mm:ss}%-4r %-5p [%t] %37c %3x - %m%n";
    Level DEFUALT_DEBUG_THRESHOLD = Level.WARN;

    Log LOG = LogFactory.getLog(ProgrammaticallyAddingFilters.class);

    ConsoleAppender consoleAppn = new ConsoleAppender();
    //configure the appender
    consoleAppn.setLayout(new PatternLayout(APPN_LAYOUT_PATTERN));
    consoleAppn.setThreshold(DEFUALT_DEBUG_THRESHOLD);
    consoleAppn.activateOptions();
    try {
      List<StringMatchFilter> filterList = getStringMatchFilters();
      for (StringMatchFilter stringMatchFilter : filterList) {
        consoleAppn.addFilter(stringMatchFilter);
      }
    } catch (Exception e) {
      LOG.warn("exception adding the supress log filters", e);
    }
    //add appender to any Logger (here is root)
    Logger.getRootLogger().addAppender(consoleAppn);

    LOG.debug("Things will fall in line soon. there is way out of every problem");
    LOG.debug("Keep Cool 123");
    LOG.debug("Hey there , Hello World");
  }

  private static List<StringMatchFilter> getStringMatchFilters() {
    List<StringMatchFilter> stringMatchFilterList = new ArrayList<>();
    StringMatchFilter smf = new StringMatchFilter();
    smf.setStringToMatch("Keep Cool 123");
    smf.setAcceptOnMatch(false);

    StringMatchFilter smf2 = new StringMatchFilter();
    smf2.setStringToMatch("Things will fall in line soon");
    smf2.setAcceptOnMatch(false);
    stringMatchFilterList.add(smf2);

    stringMatchFilterList.add(smf);
    stringMatchFilterList.add(smf2);
    return stringMatchFilterList;
  }
}
包日志;
导入org.apache.commons.logging.Log;
导入org.apache.commons.logging.LogFactory;
导入org.apache.log4j.ConsoleAppender;
导入org.apache.log4j.Level;
导入org.apache.log4j.Logger;
导入org.apache.log4j.PatternLayout;
导入org.apache.log4j.varia.StringMatchFilter;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.List;
公共类程序调用添加筛选器{
公共静态void main(字符串[]args){
/**
*与文件附加器相关
*/
字符串APPN_LAYOUT_PATTERN=“%d{MM-dd@HH:mm:ss}%-4r%-5p[%t]%37c%3x-%m%n”;
Level default\u DEBUG\u THRESHOLD=Level.WARN;
Log Log=LogFactory.getLog(ProgrammaticallyAddingFilters.class);
consoleApender consoleAppn=新的consoleApender();
//配置追加器
consoleAppn.setLayout(新模式布局(APPN_LAYOUT_模式));
consoleAppn.setThreshold(解除调试阈值);
consoleAppn.activateOptions();
试一试{
List filterList=getStringMatchFilters();
用于(StringMatchFilter StringMatchFilter:filterList){
consoleAppn.addFilter(stringMatchFilter);
}
}捕获(例外e){
LOG.warn(“添加Superss日志过滤器的异常”,e);
}
//将appender添加到任何记录器(这里是root)
Logger.getRootLogger().addAppender(consoleAppn);
调试(“事情很快就会好起来的,每个问题都有解决的办法”);
LOG.debug(“保持冷静123”);
调试(“嗨,你好,世界”);
}
私有静态列表getStringMatchFilters(){
List stringMatchFilterList=new ArrayList();
StringMatchFilter smf=新的StringMatchFilter();
smf.setStringToMatch(“保持冷却123”);
smf.setAcceptOnMatch(假);
StringMatchFilter smf2=新的StringMatchFilter();
smf2.setStringToMatch(“事情很快就会好起来”);
smf2.setAcceptOnMatch(假);
stringMatchFilterList.add(smf2);
stringMatchFilterList.add(smf);
stringMatchFilterList.add(smf2);
返回字符串匹配过滤器列表;
}
}