如何在回调中获取所有追加器名称



如何使用logback获取在Java中在List中设置的所有追加器名称的列表。

以下代码将收集当前LoggerContext中的所有追加器:

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);
}

谢谢@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();
    }
}

相关内容

  • 没有找到相关文章

最新更新