转换 LOG4J >> SLF4J + logback

2024-03-13

我目前的任务是将所有出现的 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 );
    }
}

再次浏览大量文档和论坛帖子后,我认为我在 logback 中找到了一个可行的解决方案。

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

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

我没有使用 getLoggerRepository().getCurrentLoggers() 而是改用

lc.getLoggerList();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

转换 LOG4J >> SLF4J + logback 的相关文章

随机推荐

  • TimeZoneInfo.ConvertTimeFromUtc c#

    var Result1 TimeZoneInfo ConvertTimeFromUtc DateTime UtcNow TimeZoneInfo Local var Result2 TimeZoneInfo ConvertTimeFromU
  • 如何通过CSS突出显示java代码?

    我看到一些很酷的代码突出显示 看起来像 Eclipse 中的代码 但我找不到它 你知道任何很酷的 java 代码高亮 css 吗 我想你想要代码美化 http code google com p google code prettify 支
  • 如何取消我的 Microsoft Azure 订阅?

    我注册了 Azure 试用版 但不再使用它 但是 他们仍在向我的信用卡收费 我想取消订阅 但找不到方法 我也尝试联系客户服务中心 但没有回复 我如何取消 关闭我的帐户 要取消您的帐户 请登录 Azure 帐户门户 https account
  • Log4j2 已删除的滚动文件仍然打开并且磁盘空间未释放

    我最近在我的 tomcat6 服务器上从 log4j 迁移到 log4j2 问题是我删除的滚动文件永远保持打开状态 因此磁盘空间没有被释放 我使用此命令 sudo usr sbin lsof grep returned 来检查打开的已删除文
  • 从 joinPoint 获取 HTTP 方法

    我需要从某个方面的 joinPoint 获取像 POST PATCH GET etc 这样的 http 方法 Before isRestController public void handlePost JoinPoint point do
  • 在本地计算机上安装主题。我需要 FTP 数据连接吗?

    我刚刚第一次在本地主机上安装了 wordpress 我想安装一个主题 它询问我的 FTP 用户名和密码 它说 要执行请求的操作 WordPress 需要访问您的 Web 服务器 请输入您的 FTP 凭据以继续 如果您不记得您的凭据 您应该联
  • 如何在ListView中使用虚拟模式?

    我在用着VirtualMode填充列 例如 List
  • 模运算符 (%) 实际上是如何计算的?

    最近我对模运算符感到困惑 据了解a b a a b b当我们有整数时a and b where a gt b 如果a and b足够小 然而 当谈到处理器的计算方式时 处理器是否使用与前面提到的相同的方法 a a b b 也许只是将除法翻译
  • 通过 JavaMail 发送邮件时 Message-Id 被替换

    我试图找到一个解决方案 希望运气好 所以我决定将其发布在这里 问题是 当我使用 javaMail 发送消息时 它会自动生成一个消息 ID 我将其存储到数据库中 然后识别对此消息的回复 但当消息发送时 由于某种原因 smpt 服务器会更改该消
  • 循环依赖注入角度2

    我一直在为注射而苦苦挣扎services进入彼此 以下博客构造函数中的循环依赖和依赖注入 http misko hevery com 2008 08 01 circular dependency in constructors and de
  • C/C++ 中两个字符的总和

    在 C C 中 当我想查找两个字符的总和时 我得到 int 形式的结果 例如 include
  • 如何将用户输入的值附加到 df 的不同列中?

    我正在尝试创建一个df基于用户输入如下 import pandas as pd data pd DataFrame columns ID QTY MOA TAX while True add seg input Do you want to
  • 验证 XSD 架构?

    我正在编写一个 XML 架构 XSD 来描述我们的合作伙伴向我们发送数据时应采用的格式 我很难找到一个可以验证我编写的 XSD 架构文件的工具 到目前为止我发现的最好方法是首先编写一个示例输入 XML 文件 然后尝试验证that与 XSD
  • 如何在reactjs new hook api中进行api调用并跨组件共享?

    如何在新的reactjs hook api中调用rest Api 并使用 useEffect 和 useState 重用数据 我只想跨组件重用数据 import useState useEffect from react export de
  • mysql 按唯一单词匹配的数量排序

    我发现很多问题都要求出现次数 但没有一个问题与我希望的完全一样 动态生成的 准备好的语句 查询将产生如下结果 SELECT FROM products WHERE title LIKE AND title LIKE AND content
  • 更改 Bootstrap Typeahead 的外观

    我一直在尝试使用引导程序进行搜索提前输入 我已经能够得到dropdown list使用 Ajax 但是 我想更改下拉列表的宽度以及其中的填充和基本背景颜色 这是白色的 我该怎么做 另外 我希望它始终显示a gt View All Resul
  • 在 MVC 应用程序中将实体框架数据模型放在哪里?

    让我们考虑默认的 ASP NET MVC 应用程序文件夹结构 它看起来像这样 App data Content Controllers HomeController cs Models AccountModels cs Scripts Vi
  • 是否可以在批处理文件中逐行从管道中读取?

    我想知道是否可以从批处理文件中的管道中读取数据 如果我写 echo Test 我明白 毫不奇怪 Test 那很好 但是如果我想通过管道传输输出并从另一个命令读取它怎么办 echo Test echo 如何通过管道获得与以前相同的结果 谢谢
  • 警告:json_decode() 最多需要 2 个参数,给定 4 个参数

    我尝试像这样使用 json decode json decode string true 100 JSON BIGINT AS STRING 但我收到错误 Warning json decode expects at most 2 para
  • 转换 LOG4J >> SLF4J + logback

    我目前的任务是将所有出现的 LOG4J 更改为 SLF4J 包括必要时的 logback 我已经设法将所有旧的 log4j xml 转换为 logback xml 并强制使用 logback 附加程序 但是 我刚刚发现代码中的一行还无法转换