【问题标题】:How to get all the appender names in logback如何在 logback 中获取所有 appender 名称
【发布时间】:2018-03-05 12:47:57
【问题描述】:

如何在使用 logback 时获取所有已在 Java 中的 List 中设置的 appender 名称的列表。

【问题讨论】:

    标签: java logging logback logback-classic


    【解决方案1】:

    以下代码将收集当前LoggerContext中的所有appender:

    private Map<String, Appender<ILoggingEvent>> getAppendersMap() {
        LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
    
    
        Map<String, Appender<ILoggingEvent>> appendersMap = new HashMap<>();
        for (Logger logger : loggerContext.getLoggerList()) {
    
            Iterator<Appender<ILoggingEvent>> appenderIterator = logger.iteratorForAppenders();
            while (appenderIterator.hasNext()) {
                Appender<ILoggingEvent> appender = appenderIterator.next();
                if (!appendersMap.containsKey(appender.getName())) {
                    appendersMap.put(appender.getName(), appender);
                }
            }
        }
    
        return appendersMap;
    }
    

    然后您可以像这样列出名称:

    Map<String, Appender<ILoggingEvent>> appendersMap = getAppendersMap();
    
    for (String key : appendersMap.keySet()) {
        logger.info("appender name = {}", key);
    }
    

    【讨论】:

      【解决方案2】:

      感谢@glytching。

      我找到了一个更简短的答案:

      LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
      for (ch.qos.logback.classic.Logger logger : context.getLoggerList()) {
          for (Iterator<Appender<ILoggingEvent>> index = logger.iteratorForAppenders(); index.hasNext();) {
              Appender<ILoggingEvent> appender = index.next();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-01
        • 2021-08-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多