我目前的任务是将所有出现的 LOG4J 更改为 SLF4J,包括必要时的 logback。
我已经设法将所有旧的 log4j.xml 转换为 logback.xml 并强制使用 logback 附加程序,但是,我刚刚发现代码中的一行还无法转换为 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 中是否有类似的东西或者是否有某种解决方法?
此致,
达扎
edit:
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 );
}
}