我目前正在启动一个新的 Web 应用程序(在 tomcat 6 上运行) 我有使用 slf4j 的组件和使用公共(public)日志记录的组件 由于多种原因,我计划使用 log4j 2.0 作为日志实现(主要是为了附加程序:SocketAppender 和 SyslogAppender,但也因为提升配置重新加载而不会丢失日志事件)
现在我的问题是: - 我应该在哪个接口(interface)上编写我的新类(class)? loag4j 还是 slf4j?甚至公共(public)日志记录?
部署 jar 的首选方式是什么?将它们放入我的应用程序 war 中,还是将它们放入 tomcat 库中?
我需要部署哪些 jar? log4j(包括 slf4j 和 commons 绑定(bind))、commons 日志记录 (slf4j-api-1.7.2.jar) 和 slf4j api (slf4j-api-1.7.2.jar)
最佳答案
To which interface do I program my new classes? loag4j or slf4j?
如果您要使用 SLF4J,请针对该接口(interface)进行编程。它为底层日志记录实现提供了最大的灵 active 。 slf4j 的重点是成为一个您可以对其进行编程的接口(interface),因此如果您将来决定切换到 logback,则无需重写代码。
What's the preferred way to deploy the jars? put them in my application war or do i put them into the tomcat libs?
将它们放入您的 WAR 中。
将 JAR 放在 Tomcat 库目录中的唯一原因 (imo) 是它们是否需要加载 native 库。由于 Java 不允许您从两个不同的类加载器加载相同的 native 库,因此您需要将 then 放在一个公共(public)位置。但这不适用于此处。
有些人认为 lib 目录是一种节省空间的方式。当“服务器级”机器有 1 GB RAM 时,这可能是有效的,但现在已经不适用了。避免使用 lib
意味着您可以避免大多数难以调试的类加载问题。
what jars do I need to deploy?
- slf4j-api 是基本 API
- slf4j-log4j12 将实际日志记录路由到 Log4J
- jcl-over-slf4j 拦截 Commons Logging 并通过 SLF4J 将其路由(到 Log4J)
- log4j 将成为您的物理日志记录框架
我假设您已经拥有 Log4J 的配置和/或可以轻松编写该配置。如果没有,您所关心的只是处理内部使用 Log4J 的代码,还有 log4j-over-slf4j
,它将拦截 Log4J 调用。然后你需要选择一个框架,比如 Logback。
(注意:我最初添加了指向所有这些包的链接,但没有足够的代表发布它们。所以 here's 一个指向 Maven 存储库的链接,其中突出显示了所有 SLF4J 包)
关于java - 如何一起使用 log4j 2.0 和 slf4j 以及 Commons Logging,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15095877/