Websphere多个slf4j logback绑定可以解决

 木色雪魂K 发布于 2023-01-19 08:56

我在Websphere v8.5.5.0上运行一个应用程序,并尝试使用logback作为我的日志框架.

当我尝试启动应用程序时,我遇到类似于此错误的问题:

[10/03/14 13:19:00:900 EST] 00000097 SystemErr     R   SLF4J: Class path contains multiple SLF4J bindings.
[10/03/14 13:19:00:900 EST] 00000097 SystemErr     R   SLF4J: Found binding in [bundleresource://266.fwk1755217229:1/org/slf4j/impl/StaticLoggerBinder.class]
[10/03/14 13:19:00:900 EST] 00000097 SystemErr     R   SLF4J: Found binding in    [wsjar:file:/C:/Program%20Files%20(x86)/IBM/WebSphere/AppServer_1/profiles/AppSrv01/installedApps/AUSSYDCVTLJ007Node02Cell/myapp.ear/lib/logback-classic-1.1.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
[10/03/14 13:19:00:900 EST] 00000097 SystemErr     R   SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
[10/03/14 13:19:01:313 EST] 00000097 SystemErr     R   SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]

正如答案所解释的那样,ibm库已经包含了类路径上的logback-classic库的实现.我想了解最新的logback,所以想知道是否有人可以告诉我如何手动选择要使用的绑定(不使用父级最后一个类加载器!).

2 个回答
  • 实际上,您在案例中看到的错误消息是IBM WebSphere Application Server v8.5.5.0的已知错误.问题是WAS在内部使用的是SLF4j,但是这个实现应该是来自应用程序的未知(并且不可用).不幸的是,您看到的这些错误消息并未被WAS框架阻止,但您可以忽略它们(除非您没有很好地使用SLF4j).好消息是此问题已在FixPack 3(WAS 8.5.5.3)中修复.IBM支持人员在此引用该错误.因此,请更新您的WAS安装.如果在应用此修复程序后仍然出现错误消息,则可能需要检查SLF4J配置和使用情况.

    约翰

    2023-01-19 09:03 回答
  • 根据SLF4J文档,应用程序选择要使用的绑定并将其添加到其类路径中:

    声明日志记录的项目依赖项

    鉴于Maven的传递依赖规则,对于"常规"项目(不是库或框架),可以使用单个依赖声明来声明日志记录依赖性.

    但是,强烈建议库或框架不声明对特定绑定的依赖:

    图书馆

    基本规则嵌入式组件(如库或框架)不应声明对任何SLF4J绑定的依赖性,而仅依赖于slf4j-api.当库声明对特定绑定的传递依赖时,该绑定强加给最终用户否定SLF4J的目的.请注意,声明对绑定的非传递依赖性(例如,用于测试)不会影响最终用户.


    这里的问题与Logging Separation有关,而不是依赖关系管理.Logging Separation的主题将在 logback手册中详细讨论.从logback手册中建议的" 最简单的方法 "是在Web应用程序中实际包含SLF4J api和logback,并使用父类最后一个类加载:

    假设您的容器支持子级优先加载,可以通过在每个应用程序中嵌入slf4j和logback jar文件的副本来完成日志记录的分离.对于Web应用程序,将slf4j和logback jar文件放在Web应用程序的WEB-INF/lib目录下足以为每个Web应用程序提供单独的日志记录环境.

    基本上,Websphere决定使用SLF4J和logback进行容器级日志记录.这很好,但除非应用程序想要参与容器管理的日志记录框架,否则不应将该决定暴露给应用程序.

    在Websphere添加了选择应用程序是否应该参与容器管理日志记录的能力之前,唯一可行的解​​决方案是使用父类最后一个类加载,并在WEB-INF/lib或等效目录中包含SLF4J和您选择的绑定.

    2023-01-19 09:03 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有