我目前的任务是将所有出现的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更容易)。 –