Apache HTTP客户端和日志记录的问题 [英] Issues with Apache HTTP Client and logging

查看:594
本文介绍了Apache HTTP客户端和日志记录的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的Tapestry应用程序中,我有时需要对某个URL进行GET请求.我这样做(使用Apache的HttpClient 4.2.1)

In my Tapestry application, I need to do a GET request to a certain URL at some point. I do it like this (using Apache's HttpClient 4.2.1)

String scheme = getScheme();
String host = getHost();
int port = getPort();
String path = getPath();
String paramKey = getParamKey();
String paramValue = getParamValue();

URIBuilder builder = new URIBuilder();
builder
    .setScheme(scheme)
    .setHost(host)
    .setPort(port)
    .setPath(path)
    .setParameter(paramKey, paramValue);

URI uri = builder.build();

HttpGet getRequest = new HttpGet(uri);
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(getRequest);

当我在Glassfish(3.1.2.2)上部署WAR并执行有问题的代码时,会引发以下异常:

When I deploy my WAR on Glassfish (3.1.2.2) and the code in question is executed, the following exception is thrown:

Caused by: org.apache.commons.logging.LogConfigurationException: org.apache.commons.logging.LogConfigurationException: No suitable Log constructor [Ljava.lang.Class;@78aded17 for org.apache.commons.logging.impl.Log4JLogger (Caused by java.lang.NoClassDefFoundError: org/apache/log4j/Category) (Caused by org.apache.commons.logging.LogConfigurationException: No suitable Log constructor [Ljava.lang.Class;@78aded17 for org.apache.commons.logging.impl.Log4JLogger (Caused by java.lang.NoClassDefFoundError: org/apache/log4j/Category))
    at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:543)
    at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:235)
    at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:209)
    at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:351)
    at org.apache.http.impl.client.AbstractHttpClient.<init>(AbstractHttpClient.java:187)
    at org.apache.http.impl.client.DefaultHttpClient.<init>(DefaultHttpClient.java:146)

我在pom.xml中指定了此

I specify this in my pom.xml

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.2.1</version>
</dependency>

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.14</version>
</dependency>

<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.1.1</version>
</dependency>

然后我检查并确保未找到"的类实际上在WEB-INF/lib/log4j-1.2.14中.

And I checked and made sure the Class that is "not being found" is actually in WEB-INF/lib/log4j-1.2.14.

有什么办法解决这个问题?

Is there any way to solve this issue?

推荐答案

您遇到了类加载器问题.也许首先加载使用不同log4j版本的另一个Web应用程序.类加载器使用找到的类的第一个版本. 试试这个:

You have a classloader problem. Maybe another web application, that uses different log4j version, is loaded first. The classloader uses the first version of the class it finds. Try this:

  • 从应用程序服务器中删除所有其他应用程序
  • 检查服务器的类路径中是否没有其他log4j.

尝试安装并启动您的应用程序.

Try to install and start your application.

这篇关于Apache HTTP客户端和日志记录的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆