转换LOG4J>> SLF4J +登录 [英] Convert LOG4J >> SLF4J + logback

查看:89
本文介绍了转换LOG4J>> SLF4J +登录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前的任务是将所有出现的LOG4J更改为SLF4J,包括在必要时进行注销.

我已经设法将所有旧的log4j.xml转换为logback.xml并强制使用logback附加程序,但是,我刚刚在代码中发现了一行,目前还不能转换为slf4j/logback. /p>

搜索该问题并没有发现任何可用的方法,因此我希望你们中的一些人可以在这里为我提供帮助.

代码行是:

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

解决方案

再次浏览了无数文档和论坛帖子之后,我认为我已经在logback中找到了可行的解决方案.

我现在使用的是Logback LoggerContext,而不是使用(不存在的)LogManager类:

LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();

我不再使用getLoggerRepository().getCurrentLoggers(),而是切换为使用

lc.getLoggerList();

I am currently tasked with changing all occurrences of LOG4J to SLF4J including logback when necessary.

I already managed converting all the old log4j.xml to logback.xml and to force the usage of logback appenders, however, I just discovered a line in the code that I can't translate to slf4j / logback just yet.

Googling the issue didn't turn up anything usable, so I hope that some of you can help me here.

The code line is:

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

The main issue seems to be the LogManager class. I couldn't come up with any logback equivalent. Does anyone know if there is something similar in logback or if there's some kind of workaround?

Best regards, daZza

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

解决方案

After going through tons of documentations and forum posts again, I think that I've found a working solution in logback.

Instead of using the (nonexistent) LogManager class I am now using the logback LoggerContext:

LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();

And instead of using getLoggerRepository().getCurrentLoggers() I switched to using

lc.getLoggerList();

这篇关于转换LOG4J>> SLF4J +登录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆