我目前的任務是將所有出現的LOG4J更改爲SLF4J,並在必要時包括logback。轉換LOG4J >> SLF4J + logback
我已經管理將所有舊的log4j.xml轉換爲logback.xml,並強制使用logback appender,但是,我剛剛在代碼中發現了一行,我無法將其轉換爲slf4j/logback。
用谷歌搜索這個問題沒有任何可用的東西,所以我希望你們中的一些人能幫助我。
的代碼行是:
for (final Enumeration e = LogManager.getLoggerRepository().getCurrentLoggers(); e.hasMoreElements();) {
final Logger logger = (Logger) e.nextElement();
final Level level = logger.getLevel();
if (level != null) {
final String name = logger.getName();
final Integer intLvl = new Integer(level.toInt());
logLevelLocal.put(name, intLvl);
}
的主要問題似乎是LogManager類。我無法想出任何對等的logback。有沒有人知道在logback中是否有類似的東西,或者是否有某種解決方法?
最好的問候, daZza
編輯:
1:
public static void toggleLogging(final boolean enable) {
if (enable) {
Properties.LOGGING_ENABLED = Boolean.TRUE;
System.out.println(ConstantsCommon.SYSOUT_PREFIX + LOG_LOGGING + LOG_ON);
for (final Iterator it = ConstantsCommon.LOGGER_LEVELS.keySet().iterator(); it.hasNext();) {
final String logger = (String) it.next();
final int logLevel = ((Integer) ConstantsCommon.LOGGER_LEVELS.get(logger)).intValue();
((Logger) LoggerFactory.getLogger(logger)).setLevel(Level.toLevel(logLevel));
}
root.setLevel(Level.toLevel(ConstantsCommon.LOGGER_ROOTLEVEL));
} else {
Properties.LOGGING_ENABLED = Boolean.FALSE;
System.out.println(ConstantsCommon.SYSOUT_PREFIX + LOG_LOGGING + LOG_OFF);
for (final Iterator it = ConstantsCommon.LOGGER_LEVELS.keySet().iterator(); it.hasNext();) {
final String logger = (String) it.next();
((Logger) LoggerFactory.getLogger(logger)).setLevel(Level.OFF);
}
root.setLevel(Level.OFF);
}
}
2:
public void setLogLevel(final String loggerName, final int level) throws ModelRemoteException {
if ((level == Priority.ALL_INT) || (level == Priority.DEBUG_INT) || (level == Priority.ERROR_INT)
|| (level == Priority.FATAL_INT) || (level == Priority.INFO_INT) || (level == Priority.WARN_INT)
|| (level == Priority.OFF_INT)) {
final Level targetLevel = Level.toLevel(level);
final Logger logger = ((Logger) LoggerFactory.getLogger(loggerName));
if (logger != null) {
((Logger) LoggerFactory.getLogger(loggerName)).setLevel(targetLevel);
ConstantsCommon.LOGGER_LEVELS.put(loggerName, new Integer(level));
} else {
throw new ModelRemoteException(PropertiesErrorCodes.ec2024);
}
} else {
throw new ModelRemoteException(PropertiesErrorCodes.ec2025);
}
}
什麼在循環內?通常主應用程序完全不知道記錄器的配置,所以這裏最有可能發生一些有趣的事情。 –
已修改。不要認爲它是相關的。我只需要logManager.getLoggerRepository()的logback「翻譯」。getCurrentLoggers() – daZza
看起來你正在創建一個lognames-> level的地圖,這對我來說聽起來像一個調試工具(它應該移出你的應用程序並進入記錄器配置在我看來)或優化測試如果記錄器被啓用(這在slf4j更容易)。 –