【发布时间】:2018-03-05 12:47:57
【问题描述】:
如何在使用 logback 时获取所有已在 Java 中的 List 中设置的 appender 名称的列表。
【问题讨论】:
标签: java logging logback logback-classic
如何在使用 logback 时获取所有已在 Java 中的 List 中设置的 appender 名称的列表。
【问题讨论】:
标签: java logging logback logback-classic
以下代码将收集当前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);
}
【讨论】:
感谢@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();
}
}
【讨论】: