繁体   English   中英

如何将 Logback 附加到 smartfox 服务器

[英]How To attach Logback to smartfox server

如何将logback附加到smartfox服务器?

smartfox默认使用 log4j。 如何将我的扩展/所有 smartfox 的日志记录转移到logback

我试过这个,但是这个错误失败了,因为我猜它已经到了log4j。

SmartFoxServer 2x 使用Simple Logging Facade for Java (SLF4J)进行日志记录。 SLF4J 的真正目的是在日志框架上提供一个外观,以便用户可以用另一个日志框架替换一个日志框架。 在您的情况下,带有 Logback 的 log4J。 我将首先解释 SLF4J 的工作原理以及如何将一个日志框架更改为另一个日志框架,并简要讨论一些注意事项。 然后我将介绍一些 SmartFoxServer 的细节。

Java 架构的简单日志外观

SLF4J 提供 API 用作实际日志框架上的外观(抽象层)。 这允许用户在部署时轻松地在框架之间切换,而无需更改代码。 但这也意味着 SLF4J 本身是不够的——默认实现是 no-op。 为了实际记录任何内容,您需要实际的日志框架(例如 log4j 或 logback)和所谓的“binder”,它充当 SLF4J 和日志框架之间的桥梁或适配器。

交换日志框架

SLF4J 用户手册提供了有关如何在部署期间将一个框架与另一个框架交换的详细说明。 简而言之,您只需要删除旧的活页夹和日志框架并添加新的活页夹和新的日志框架。 要将 log4 与 logback 交换,您需要删除 slf4j-log4j12 和 log4j jar 并添加 logback-classic 和 logback-core。

注意事项

您应该确保类路径中只有一个绑定器实现。 不止一个会导致警告,而不是错误。 SLF4J 只会选择其中一种实现。 但我不排除这会导致使用多个类加载器的更复杂应用程序(例如 SmartFoxServer)出现问题的可能性。 但更重要的是,您应该确保 SLF4J API、活页夹和日志框架版本兼容。 例如,如果您使用旧版本的 SLF4J 和新版本的 logback,这可能会导致 ClassNotFoundException。 我怀疑这可能是您看到错误的原因。

将 lof4j 与 Logback 交换为 SmartFoxServer 2x 的日志记录框架

SmartFoxServer 2x 版本 2.17.3 使用 SLF4J API 版本 1.7.5。 要交换 log4j,您需要先删除lib/slf4j-log4j12-1.7.5.jar ,然后添加兼容版本的 logback-classic 和 logback-core jar。 例如logback-classic 1.1.0logback-core 1.1.0

您可以删除lib/log4j-1.2.15.jar但我宁愿保留它。 活页夹( lib/slf4j-log4j12-1.7.5.jar )不打算直接使用,因此删除应该是安全的。 另一方面,有些库直接使用 log4j。 我不知道 SmartFoxServer 2x 是否使用任何此类库,但保留它以防万一更安全。 交换 binder 就足以让 SLF4J 使用 Logback 并忽略 log4j。

记录器输出

SmartFoxServer 2x 解析记录器输出以提供一些功能,例如管理日志查看器。 如果您更改日志输出,这可能会导致此功能停止工作,甚至可能导致其他问题(理论上不应该,但您永远不知道)。 有一个配置文件( config/logParser.properties )可以让你配置日志解析器,但我没有找到任何关于它的文档。 您可以尝试在SmartFoxServer 论坛提问 开发人员实际上在那里非常活跃,因此他们可能会提供帮助。

仅为您的扩展程序交换记录器

我给出的指令交换了所有扩展和 SmartFoxServer 的记录器。 如果您愿意,您可以尝试仅将它们交换为您的扩展。 但我不太确定这是否以及如何工作。 每个类扩展都使用自己的类加载器,但这提供了扩展和 SmartFoxServer 和扩展之间的隔离,而不是扩展和 SmartFoxServer 之间的隔离。 这意味着如果将lib.jar添加到扩展 A 类路径,扩展 B 或 SmartFoxServer 代码将看不到它。 但是,如果您将lib.jar添加到 SmartFoxServer 类路径中,则扩展 A 和扩展 B 都可以看到它。由于 SmartFoxServer 的类路径中已经包含 SLF4J API,因此您不应将其添加到扩展类路径中。 您可以尝试将 logback-classic 和 logback-core 添加到您的扩展类路径中。 但是在这种情况下,您的扩展类路径中将有两个绑定器实现(来自 SmartFoxServer 类路径的 logback 和 log4j)。 正如已经讨论过的,我不太确定这如何以及是否有效。

结论

SLF4J 提供了一种简单的方法来交换日志框架,但有一些警告。 SmartFoxServer 本身也添加了一些警告。 除非 SmartFoxServer 团队支持底层日志框架的交换(根据他们论坛中的一些回答判断,他们不支持),否则我会非常小心,并且只有在有一些好处并且这不仅仅是个人问题的情况下才进行此类交换偏爱。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM