我目前正在启动一个新的Webapp(在tomcat 6上运行)。我有使用slf4j的组件和使用commons日志的组件。我计划使用log4j 2.0作为日志实现,原因有几个(主要针对Appender:SocketAppender和SyslogAppender,但也因为在不丢失日志事件的情况下升级配置重新加载)
现在我的问题是:-我应该用哪个接口来编程我的新类?loag4j还是slf4j?或者甚至是公共日志?
>
部署JAR的首选方法是什么?将它们放在我的应用程序war中,还是放在tomcat库中?
我需要部署哪些jar?log4j(包括slf4j和Commons绑定)、Commons日志记录(slf4j-api-1.7.2.jar)和slf4j api(slf4j-api-1.7.2.jar)
请注意,我没有使用Log4J 2.0,尽管我使用了SLF4J和Log4J 1.2。话虽如此,我将回答您的问题如下:
我使用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)
如果您的应用服务器有冲突的版本,您可能需要使用一些供应商特定的类加载器设置来覆盖
e、 在weblogic 12c中,我在我的weblogic中有这个。src/main/webapp/WEB-INF中的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>
我应该把我的新类编程到哪个接口?loag4j还是slf4j?
如果你要使用SLF4J,编程到那个接口。它为底层日志实现提供了最大的灵活性。slf4j的目的是成为一个可以编程的接口,所以将来如果你决定切换到logback,你就不必重写代码。
部署JAR的首选方法是什么?将它们放在我的应用程序war中,还是放在tomcat库中?
把他们放在你的战争中。
将JAR放在Tomcat libs目录中的唯一原因(imo)是它们是否需要加载本机库。由于Java不允许您从两个不同的类加载器加载相同的本机库,因此您需要将其放在一个公共位置。但这不适用于这里。
有些人认为lib目录是一种节省空间的方法。当“服务器级”机器有1 GB的RAM时,这可能是有效的,但现在已经不是了。避免lib
意味着您可以避免大多数难以调试的类加载问题。
我需要部署哪些jar?
我假设您已经有了Log4J的配置,并且/或者已经习惯了编写这个配置。如果没有,并且您所关心的是处理内部使用log4j的代码,那么有< code>log4j-over-slf4j,它将拦截Log4J调用。然后你需要挑选一个框架,比如Logback。
(注意:我最初添加了指向所有这些包的链接,但没有足够的代表来发布它们。所以这里有一个指向Maven存储库的链接,突出显示了所有SLF4J包)
问题内容: 我已经将一个Web应用程序部署到服务器上。我的应用程序使用和。但是,并非所有日志记录消息都已写入文件。 在我的课堂上,我有: 我的文件在本地计算机上运行良好,并且已正确部署。 我看到正在写入的应用程序生成的错误消息没有写入我的。由于输出模式的格式与我的模式不同,因此看起来的日志消息来自其他日志框架。我在中看到的日志记录如下: 我的log4j模式是这样的: 一些日志记录出现在我的文件日志
但是,部署在同一台服务器上的一些其他项目使用Tomcat的lib目录中存在的slf4j和log4j库,我无法删除这些库。 Tomcat lib目录中存在的Slf4J和Log4J版本 SLF4J-API-1.4.2 当我从Tomcat的lib目录中删除这些库并使用project的pom中提到的库时,我的项目运行良好 当我注释项目的pom文件中的依赖项并使用下面Tomcat的lib中的依赖项时,会引发
在我的项目中,我使用slf4j+log4j进行日志记录。我刚接触java,正在尝试了解日志记录是如何工作的。如果我想使用log4j以外的其他日志框架,比如java.util.logging,那么我就不需要更改任何代码,因为我使用的是SLF4J。我只需要移除log4j的jar,并添加java.util.logging的二进制。我试着了解当我们不改变任何代码时,它是如何工作的。如果问题不清楚,请让我知
我在Weblogic服务器上运行一个web应用程序(我并不熟悉)。 通过JVM args将带有日志级调试的log4j配置传递给应用程序。在日志文件中,我还可以找到一些调试级别的日志条目。 到目前为止还不错。 在调试期间,我发现一些对logger.debug()的调用不在日志文件中。 如果在调试过程中执行一步,我会在记录器:org.slf4j.impl.jdk14LoggerAdapter(com.
在我的Java应用程序中,我使用SLF4J+Logback进行日志记录。我在开发环境中使用调试级日志记录,在生产环境中使用错误级日志记录。但是有一些消息我无论如何都想要记录下来,无论日志级别如何(类似于,但使用的是logger)。 有什么切实可行的方法可以实现这一点吗?我可以使用error或更低的级别,但我想做的是给出一些信息,所以在语义上是错误的,它不是错误。 我可以在我的中为我的类定义另一个记
我有这些具体要求: 需要能够登录致命级别 现在,我的实现如下: 这是我的模式布局(在yaml): 以下是我的日志输出: 你知道如何有效地从日志输出中删除“错误”吗? 非常感谢你