萝卜白菜。 2025-07-15 10:16 采纳率: 97.6%
浏览 31

TongWeb7.0报错 invalid logger merge

TongWeb7.0报错 invalid logger merge


Caused by: java.lang.InternalError: invalid logger merge
    at java.logging/java.util.logging.Logger.mergeWithSystemLogger(Logger.java:579)
    at java.logging/java.util.logging.LogManager$3.run(LogManager.java:585)
    at java.logging/java.util.logging.LogManager$3.run(LogManager.java:582)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
    at java.logging/java.util.logging.LogManager.demandSystemLogger(LogManager.java:582)
    at java.logging/java.util.logging.LogManager$LoggingProviderAccess.demandLoggerFor(LogManager.java:2729)
    at java.logging/sun.util.logging.internal.LoggingProviderImpl.demandJULLoggerFor(LoggingProviderImpl.java:412)
    at java.logging/sun.util.logging.internal.LoggingProviderImpl.demandLoggerFor(LoggingProviderImpl.java:438)
    at java.base/jdk.internal.logger.DefaultLoggerFinder.getLogger(DefaultLoggerFinder.java:159)
    at java.base/jdk.internal.logger.LazyLoggers.getLoggerFromFinder(LazyLoggers.java:410)
    at java.base/jdk.internal.logger.LazyLoggers.getLazyLogger(LazyLoggers.java:465)
    at java.base/sun.util.logging.PlatformLogger.getLogger(PlatformLogger.java:297)
    at java.base/java.util.jar.Attributes.read(Attributes.java:423)
    at java.base/java.util.jar.Manifest.read(Manifest.java:347)
  • 写回答

5条回答 默认 最新

  • 檀越@新空间 2025-07-15 10:17
    关注

    上午好☀️☀️☀️️
    本答案参考通义千问

    这个错误信息 java.lang.InternalError: invalid logger merge 是在使用 TongWeb 7.0(由东方通开发的 Java 应用服务器)时出现的,通常与 Java 日志系统(JUL, Java Util Logging) 的配置或初始化有关。


    🔍 错误分析

    错误堆栈显示问题发生在 Logger.mergeWithSystemLogger() 方法中,这表明 JUL 在尝试合并自定义日志器与系统日志器时出现了异常

    常见原因包括:

    1. 日志配置冲突:应用或框架中可能设置了与系统日志器不兼容的日志配置。
    2. 类加载问题:某些日志相关的类可能被重复加载或版本不一致。
    3. TongWeb 7.0 的 JUL 兼容性问题:TongWeb 7.0 可能对 JDK 内置的日志系统支持不够完善,尤其是在多模块、多类加载器的环境下。
    4. 第三方库干扰:如 Log4j、Logback 等日志框架可能与 JUL 发生冲突。

    ✅ 解决方案

    以下是针对该问题的 逐步解决方案

    1. 检查日志配置文件

    • 查看应用中的 logging.properties 或其他日志配置文件。
    • 确保没有设置与系统日志器冲突的 logger 名称,例如:
      # 示例:避免设置与系统日志器同名的 logger
      # logger.java.util.logging.ConsoleHandler.level = FINE
      
    • 如果有自定义日志器,建议使用唯一的命名空间,例如:
      logger.com.myapp.level = INFO
      

    2. 禁用或调整 JUL 日志器

    • 尝试在 TongWeb 启动参数中禁用 JUL:

      -Djava.util.logging.manager=org.apache.logging.log4j.core.impl.LogManager
      

      这会将 JUL 转换为 Log4j2(如果已集成)。

    • 或者直接关闭 JUL:

      -Djava.util.logging.config.file=
      

    3. 检查依赖冲突

    • 使用工具如 mvn dependency:treegradle dependencies 检查是否有多个日志实现(如 Log4j、Logback、JUL)同时存在。
    • 排除冲突的依赖,例如:
      <!-- Maven 示例 -->
      <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-api</artifactId>
          <version>1.7.30</version>
      </dependency>
      <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>log4j-over-slf4j</artifactId>
          <version>1.7.30</version>
          <scope>provided</scope>
      </dependency>
      

    4. 升级 TongWeb 或 JDK 版本

    • TongWeb 7.0 对 JUL 的支持可能存在一些已知问题。考虑:
      • 升级到 TongWeb 8.x 或更高版本
      • 或升级到 JDK 11+(JUL 已被更现代的日志系统替代,但部分旧应用仍需兼容)。

    5. 修改 JVM 启动参数

    • 在 TongWeb 的启动脚本(如 startServer.shrun.bat)中添加以下参数以避免 JUL 初始化问题:
      -Djava.util.logging.config.class=com.sun.jndi.ldap.LdapCtxFactory
      -Djava.util.logging.config.file=/path/to/logging.properties
      

    6. 使用 SLF4J + Logback 替代 JUL

    • 如果 JUL 无法正常工作,可以考虑将整个项目从 JUL 切换为 SLF4J + Logback
      • 添加依赖:
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.30</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        
      • 移除所有 JUL 相关的配置和代码。

    🛠️ 示例:修改日志配置文件

    如果你的应用中有如下 logging.properties 文件:

    handlers= java.util.logging.ConsoleHandler
    java.util.logging.ConsoleHandler.level = FINE
    

    请尝试将其改为:

    # 关闭 JUL 日志器
    handlers=
    

    或者指定一个独立的日志器:

    handlers= com.myapp.MyCustomHandler
    com.myapp.MyCustomHandler.level = INFO
    

    📌 总结

    | 步骤 | 操作 | |------|------| | 1 | 检查并优化日志配置文件 | | 2 | 禁用或替换 JUL 为 Log4j2/Logback | | 3 | 排查依赖冲突 | | 4 | 升级 TongWeb 或 JDK | | 5 | 修改 JVM 启动参数 | | 6 | 使用 SLF4J + Logback 替代 JUL |


    如有更多关于你的应用结构、使用的日志框架或部署环境的信息,我可以提供更具体的修复建议。

    评论

报告相同问题?

问题事件

  • 创建了问题 7月15日