Log4j 如何避免twitter4j记录它在Tomcat中所做的一切?

Log4j 如何避免twitter4j记录它在Tomcat中所做的一切?,log4j,tomcat6,Log4j,Tomcat6,一般来说,我对Tomcat和Java都是新手。我正在部署一个Tomcat6应用程序,并使用twitter4j库调用Twitter.com。我已使用以下配置将Tomcat中的登录设置为log4j: log4j.rootLogger=ERROR, R log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=${catalina.base}/logs/tomcat.log log4j.appender.R

一般来说,我对Tomcat和Java都是新手。我正在部署一个Tomcat6应用程序,并使用twitter4j库调用Twitter.com。我已使用以下配置将Tomcat中的登录设置为log4j:

log4j.rootLogger=ERROR, R 
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=${catalina.base}/logs/tomcat.log
log4j.appender.R.MaxFileSize=10MB 
log4j.appender.R.MaxBackupIndex=10 
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
一切都很好。然而,twitter4j选择记录它所做的每一件事。结果,我得到了一个巨大的日志文件,它什么也没告诉我。有什么我遗漏的吗?这里有人试过类似的东西吗?i、 e.twitter4j和Tomcat,并对如何避免所有这些日志有一些见解:

[twitter4j.internal.logging.Logger]: Using class twitter4j.internal.logging.SLF4JLoggerFactory as logging factory.
[twitter4j.internal.http.HttpClientFactory]: Use twitter4j.internal.http.HttpClientImpl as HttpClient implementation.
[twitter4j.internal.http.HttpClientImpl]: Request: 
[twitter4j.internal.http.HttpClientImpl]: GET api.twitter.com/1/friends/ids.json?cursor=-1
[twitter4j.internal.http.HttpClientImpl]: X-Twitter-Client-URL:twitter4j.org/en/twitter4j-2.1.3-SNAPSHOT(build:e903c577fb3401b4c66037dfc477e73e6851e8e1).xml
[twitter4j.internal.http.HttpClientImpl]: X-Twitter-Client: Twitter4J
[twitter4j.internal.http.HttpClientImpl]: Accept-Encoding: gzip
[twitter4j.internal.http.HttpClientImpl]: User-Agent: twitter4j http://twitter4j.org//2.1.3-SNAPSHOT(build:e903c577fb3401b4c66037dfc477e73e6851e8e1)
[twitter4j.internal.http.HttpClientImpl]: X-Twitter-Client-Version:2.1.3-SNAPSHOT(build: e903c577fb3401b4c66037dfc477e73e6851e8e1)
[twitter4j.internal.http.HttpClientImpl]: Connection: close
[twitter4j.internal.http.HttpClientImpl]: Response: 
[twitter4j.internal.http.HttpClientImpl]: HTTP/1.1 200 OK
[twitter4j.internal.http.HttpClientImpl]: X-Runtime: 0.06539
[twitter4j.internal.http.HttpClientImpl]: ETag:"89c0c8cb8befe1371d08f1b6671b08de"-gzip
[twitter4j.internal.http.HttpClientImpl]: X-Transaction:1281584957-49704-11766
[twitter4j.internal.http.HttpClientImpl]: X-RateLimit-Limit: 20000
[twitter4j.internal.http.HttpClientImpl]: X-RateLimit-Remaining: 19999
[twitter4j.internal.http.HttpClientImpl]: Content-Length: 89
[twitter4j.internal.http.HttpClientImpl]: Expires: Tue, 31 Mar 1981 05:00:00 GMT
[twitter4j.internal.http.HttpClientImpl]: Last-Modified: Thu, 12 Aug 2010 03:49:17 GMT
[twitter4j.internal.http.HttpClientImpl]: X-RateLimit-Reset: 1281588557
[twitter4j.internal.http.HttpClientImpl]: X-RateLimit-Class: api_whitelisted
[twitter4j.internal.http.HttpClientImpl]: X-Revision: DEV
[twitter4j.internal.http.HttpClientImpl]: Set-Cookie: lang=en; path=
等等等等等等


非常感谢您提供的任何见解。现在这真的让我发疯。

您粘贴的日志表明您在配置中指定的模式没有被应用(例如%p是日志级别,但日志级别不在输出中)。这让我觉得你的log4j配置不起作用

您能描述一下log4j属性文件在哪里,以及log4jjar文件在应用程序中的位置吗

您的
log4j.properties
应该位于
/WEB-INF/classes/log4j.properties
,而log4j.jar应该位于
/WEB-INF/lib


看起来twitter4j使用的是SLF4j而不是log4j。我认为您只需要在类路径上包含
slf4j-logj12.jar
库,然后切换到log4j实现。

粘贴的日志表明您在配置中指定的模式没有被应用(例如%p是日志级别,但输出中没有日志级别)。这让我觉得你的log4j配置不起作用

您能描述一下log4j属性文件在哪里,以及log4jjar文件在应用程序中的位置吗

您的
log4j.properties
应该位于
/WEB-INF/classes/log4j.properties
,而log4j.jar应该位于
/WEB-INF/lib


看起来twitter4j使用的是SLF4j而不是log4j。我认为您只需要在类路径中包含
slf4j-logj12.jar
库,然后切换到log4j实现。

我刚刚尝试了您的建议。log4j.properties位于/WEB-INF/classes/log4j.properties,log4j.jar位于/WEB-INF/lib。我刚刚将slf4j-logj12.jar添加到/WEB-INF/lib中。当我重新部署应用程序时,仍然收到相同的消息。此输出来自catalina.out。Tomcat.log(log4j)的输出遵循属性文件:>错误http-8080-6 org.apache.catalina.loader.WebappClassLoader-web应用程序似乎启动了名为[Timer-2]的线程,但未能停止它。这很可能会造成内存泄漏。>错误http-8080-6 org.apache.catalina.loader.WebappClassLoader-web应用程序似乎已启动名为[Twitter流处理线程[建立连接]]的线程,但未能停止该线程。这很可能会造成内存泄漏。为什么twitter4j会打印到标准输出?我刚刚试过你的建议。log4j.properties位于/WEB-INF/classes/log4j.properties,log4j.jar位于/WEB-INF/lib。我刚刚将slf4j-logj12.jar添加到/WEB-INF/lib中。当我重新部署应用程序时,仍然收到相同的消息。此输出来自catalina.out。Tomcat.log(log4j)的输出遵循属性文件:>错误http-8080-6 org.apache.catalina.loader.WebappClassLoader-web应用程序似乎启动了名为[Timer-2]的线程,但未能停止它。这很可能会造成内存泄漏。>错误http-8080-6 org.apache.catalina.loader.WebappClassLoader-web应用程序似乎已启动名为[Twitter流处理线程[建立连接]]的线程,但未能停止该线程。这很可能会造成内存泄漏。为什么twitter4j打印到标准输出?