我目前正在开始一个新的webapp(在Tomcat 6上运行)我一直在使用SLF4J使用通用日志我打算使用log4j的2.0日志实现,由于多种原因(主要为追加程序组件和组件:SocketAppender和SyslogAppender也是因为提升配置不记录事件的损失重装)
现在,我的问题是: - 哪个接口我的计划我的新类? loag4j或SLF4J? 甚至公共记录?
到界面我计划我的新类? loag4j或SLF4J?
如果你要使用SLF4J,计划到该接口。 它提供了最大的灵活性底层日志实现。 SLF4J的一点是一定要,你可以计划,所以在未来,如果你决定切换到,比方说,的logback,您将不必重写代码的接口。
什么是部署罐子的首选方式? 把它们放在我的应用程序的战争还是我把它们放到tomcat的库?
把它们放在你的战争。
唯一的原因(IMO)把JAR文件在Tomcat libs目录是如果他们需要加载本地库。 由于Java不会让你从两个不同的类加载器加载相同的本地库,你需要把然后在公共位置。 但是,这并不适用于此。
有些人认为lib目录中,以此来节省空间。 这可能是有效的,当“服务器级”的机器有内存1 GB,但没有任何更多。 并避免lib
意味着您避免大部分的硬调试的类加载的问题。
我需要什么罐子部署?
- SLF4J的API是基本API
- SLF4J-log4j12路线的实际日志记录的Log4J
- JCL-过SLF4J截距通用日志并将其路由通过SLF4J(到Log4J的)
- log4j的将是你的身体日志框架
我假设你已经配置Log4j和/或舒适编写配置。 如果不是,和所有你关心的是处理那些使用log4j内部的代码,有log4j-over-slf4j
,这将拦截Log4J的要求。 然后,你需要选择一个框架,比如的logback。
(注:我最初添加链接到所有这些包,但没有足够的代表张贴他们所以这里是一个链接到Maven仓库中所有的SLF4J包的高亮显示)
我使用SLF4J与log4j2和使用
slf4j-api-1.7.12.jar
log4j-api-2.2.jar
log4j-core-2.2.jar
log4j-slf4j-impl-2.2.jar
jcl-over-slf4j-1.7.12.jar(get rid of commons logging jars)
如果你的应用服务器有冲突的版本,则可能需要使用一些专门的类加载器设置覆盖
例如,在WebLogic 12c中我有这在我的src /主/ web应用/ WEB-INF中的weblogic.xml
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app
xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd
http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.5/weblogic-web-app.xsd">
<container-descriptor>
<prefer-application-packages>
<package-name>org.apache.log4j.*</package-name>
<package-name>org.apache.commons.logging.*</package-name>
<package-name>org.apache.commons.lang.*</package-name>
<package-name>org.apache.commons.io.*</package-name>
<package-name>org.apache.commons.collections4.*</package-name>
<package-name>org.slf4j.*</package-name>
</prefer-application-packages>
</container-descriptor>
<jsp-descriptor>
<keepgenerated>true</keepgenerated>
<debug>true</debug>
</jsp-descriptor>
<context-root>/cnfg</context-root>
</weblogic-web-app>
请注意,我没有使用Log4J的2.0,虽然我已经使用SLF4J Log4J的使用1.2。 有了这样说,我会回答你的问题如下:
- 程序SLF4J。 它有一个很好的,简单的API,是你可能会从一个日志框架所需要的一切。 另外,如果你决定要切换到的logback或Log4J 1.2中或任何替代Log4J的2.0,你可以切换出在后端的罐子有些道理的。
- 当然把罐子在应用程序中的战争。 你应该几乎从来没有把罐子到应用程序服务器
lib
目录。 否则,就会影响到应用服务器上的所有Web应用程序,而不仅仅是你的。 此外,在应用程序服务器的jar文件lib
目录不能被部署web应用控制,但必须手动管理。 - 它看起来像你需要
slf4j-api-1.7.2.jar
, log4j-to-slf4j-2.0-beta4.jar
, log4j-2.0-beta4.jar
和log4j-core-2.0-beta4.jar
,任何依赖一起。 我敢肯定,Maven会在需要的依赖带来的,如果你正在使用。