java - 如何一起使用 log4j 2.0 和 slf4j 以及 Commons Logging

标签 java logging slf4j apache-commons-logging log4j2

我目前正在启动一个新的 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/

相关文章:

java - 记录完整堆栈跟踪性能问题

java - 使用 logback-classic/slf4j 配置默认警告/错误日志

带有 Logback + springProperty 的 Spring Boot

java - ClassNotFoundException 与 ResteasyClientBuilder (JBOSS)

java - java中的缩小类型转换

java - 如何测量分布式系统中的请求时间?

java - Log4j、SLF4J 和 Logback 有什么区别?

java - ServerSocket 是否为每个连接创建一个新套接字?

java - Spring JDBC 并使对象和数据库保持正确状态

mongodb - MongoDB 中的只写集合