HttpClient 로깅 비활성화


134

통합 테스트 스위트에서 commons-httpclient 3.1을 사용하고 있습니다. HttpClient의 기본 로깅은 매우 시끄 럽기 때문에 끌 수없는 것 같습니다. 나는 여기 의 지시를 따르려고 노력했지만 그들 중 어느 것도 차이를 만들지 않습니다.

주로 org.apache.http.wire 로거를 종료해야합니다. 문제의 일부는 어떤 유형의 로거 HttpClient가 사용하려고하는지 모르며 대부분의 문제는 이전 에이 라이브러리를 사용한 적이 없다는 것입니다. log4j.properties 파일을 작성하여 test / resources 폴더에 삭제하고 jre / lib의 master logging.properties 파일을 수정 한 후 logging 페이지 에 지정된대로 다양한 로깅 옵션을 Maven에 전송하려고 시도했지만 그중 아무것도 없습니다. 차이를 만드십시오.

도움이 필요합니다 ... 이것은 나를 미치게합니다.

업데이트 : 수정 : 문제의 출력이 실제로 내 자신이 아닌 HttpClient의 jwebunit 사용을 통해 발생하는 것으로 보입니다. 어느 쪽이든 바람직하지 않습니다.

업데이트 : 지금까지 시도해 주셔서 감사합니다. 아래 제안 된 모든 것을 시도했지만 여전히 운이 없습니다. src / test / resources 폴더에 다음 내용의 commons-logging.properties 파일이 있습니다.

org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.Log4jFactory
log4j.configuration=log4j.properties

및 다음 내용의 동일한 폴더에있는 log4j.properties 파일

log4j.rootLogger=ERROR, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%c] %m%n

#This is the line that should make httpclient shut up
log4j.logger.org.apache.http=ERROR

그러나 테스트를 실행할 때 여전히 다음과 같은 많은 결과가 나타납니다.

21:57:41.413 [main] DEBUG org.apache.http.wire - << "                                   [\r][\n]"
21:57:41.413 [main] DEBUG org.apache.http.wire - << "[\r][\n]"
21:57:41.413 [main] DEBUG org.apache.http.wire - << "                                   [\r][\n]"
21:57:41.413 [main] DEBUG org.apache.http.wire - << "                               </ul>[\n]"
21:57:41.413 [main] DEBUG org.apache.http.wire - << "    [\n]"
21:57:41.424 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "[\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "[\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "                   </div>[\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "                </li>[\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "            [\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "            [\r][\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "        </ul>[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "<div class="details">[\n]"
21:57:41.442 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "<div class="details-body details-precis  ">[\n]
"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "<div class="details-state">[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\r][\n]"
Destroying 1 processes21:57:41.465 [main] DEBUG org.apache.http.wire - << "[\r][\n]"

전선을 가로 질러 오는 모든 것에 대한이 출력은이 라이브러리를 사용할 수 없게 만드는 것입니다. 이 로그 구성을 읽으려면 특별한 조치가 필요합니까?


이 문제가 발생하는 모든 경우 : -Dlog4j.debug올바른 구성 파일이로드되도록 VM 옵션에 추가하십시오.
Tommy

3
stackoverflow.com/questions/1436761/…을 참조하십시오 . public class Main { static { System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog"); } // Rest of class as before }
PVS


3
이것이 OP를 위해 해결 된 적이 있습니까? 이 정확한 문제는 나를 죽이고 있습니다.
Collin Bell

2
이것이 해결 되었습니까? 답을 할당하려고했지만 운이 없다.
Markvds

답변:


85

log4j.properties다음을 포함하여 업데이트 :

log4j.logger.httpclient.wire.header=WARN
log4j.logger.httpclient.wire.content=WARN

Log4j 라이브러리가 설치되어 있지 않으면 HttpClient (및 JWebUnit)는 로그 백을 사용합니다. 이 상황에서 다음 logback.xml을 포함하도록 작성하거나 편집하십시오 .

<configuration>
    <logger name="org.apache" level="WARN" />
    <logger name="httpclient" level="WARN" /> 
</configuration>

WARN패키지 이름 org.apache.commons.httpclient을 사용하여 Log4j를 사용하여 로그 수준을 설정하면 예상대로 log4j.properties 작동하지 않습니다 .

log4j.logger.org.apache.commons.httpclient=WARN

HttpClient (v3.1)의 소스는 다음 로그 이름을 사용하기 때문입니다.

public static Wire HEADER_WIRE = new Wire(LogFactory.getLog("httpclient.wire.header"));
public static Wire CONTENT_WIRE = new Wire(LogFactory.getLog("httpclient.wire.content"));

19
4.2.1 소스에서 로그 이름은 "org.apache.http.headers"및 "org.apache.http.wire"이지만,이를 사용하더라도 시끄러운 아파치 로깅은 차단되지 않습니다. .
Tinclon

감사합니다!!! 또한 : httpclient를 사용하고 Log4j를 아직 사용하지 않는 자체 코드의 어딘가에이 문제가있는 경우 : classpath에 log4j jar를 포함시켜야합니다 ...
FelixD

30

참고 :이 답변 중 일부는 이미 알고 있거나 알고 있다고 생각하는 것을 반복 할 수 있지만이 질문에 약간의 잘못된 정보가 떠 있기 때문에 처음부터 시작하여 철자를 씁니다.

  • Commons HttpClient는 모든 로깅 요구에 Commons-Logging을 사용합니다.
  • Commons-Logging은 전체 로깅 프레임 워크가 아니라 여러 기존 로깅 프레임 워크를 둘러싼 래퍼입니다.
  • 즉, 로깅 출력을 제어하려는 경우 (주로) Commons-Logging 이외의 라이브러리를 구성하게 되지만 Commons-Logging은 여러 다른 라이브러리를 감싸기 때문에 알지 못하고 구성 할 라이브러리를 추측하기가 어렵습니다. 정확하게 설정하십시오.
  • Commons-Logging은 log4j에 기록 할 수 있지만, 기록 할 수도 있습니다 java.util.logging(JDK1.4 기록).
  • Commons-Logging은 현명하고 이미 사용중인 로깅 프레임 워크를 추측하여 로그를 보냅니다.
  • 로깅 프레임 워크가없고 1.4 이상인 JRE (실제로 있어야 함)에서 실행중인 경우 로그 메시지를 JDK 로깅 ( java.util.logging)으로 전송합니다.
  • Commons-Logging의 자동 검색 메커니즘에 의존하면 오류가 발생하기 쉽습니다. 단순히 log4j.jar클래스 경로에 추가 하면 사용하는 로깅 메커니즘을 전환 할 수 있습니다.
  • 어떤 로깅 라이브러리를 사용할지 Commons-Logging에 명시 적으로 알려주는 것이 좋습니다.
  • 이 지시 사항에 따라commons-logging.properties 파일을 작성하여이를 수행 할 수 있습니다.
  • commons-httpclient 로깅을 구성하기 위해 수행 할 단계는 다음과 같습니다.
    1. 사용할 기본 로깅 프레임 워크를 결정하십시오. 이 선택할 수는 있지만, 아마 log4j또는 java.util.logging당신을 위해 최상의 옵션입니다.
    2. 올바른 Log구현 을 가리 키도록 공통 로깅 특성 파일을 설정하십시오 . 예를 들어 log4j를 사용하려면 이것을 속성 파일 org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger에 넣거나 JDK logging set을 사용하십시오 org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger. 이들은 또한 시스템 속성으로 설정 될 수 있습니다 (예 : -D명령 행에서 사용).
    3. 원하지 않는 메시지를 무시하고 원하는 메시지를 출력하도록 기본 로깅 구현 (예 : log4j)을 구성하십시오.

그것은 많은 단계이지만, 그것이 필요한 것입니다. Apache-commons의 개발자는 이미 로깅 프레임 워크가 구성되어 있다고 가정하는 경향이 있으며 자동 검색을 통해 어떤 프레임 워크를 해결할 수 있습니다.
그것이 사실이 아니라면, 일을 처리하는 것이 조금 더 많은 경향이 있습니다.


1
이것은 매우 유용한 정보입니다. 이 페이지에 추가해야 할 것 같습니다 . 당신은 이것을 위해 이것을 쓰셨습니까?
natem345

1
이 답변은 훌륭하지만 작동하지 못했습니다. Dropwizard를 사용하고 있으며 언급 한 모든 것을 시도했지만 아무 소용이 없었습니다. '(
Vic Seedoubleyew

19

이것을 log4j 구성 파일에 넣었습니다.

log4j.logger.org.apache.http.wire=WARN

이것은 출력을 경고 레벨 이상으로 제한합니다


19

이것은 내 테스트에서 효과가있었습니다.

java.util.logging.Logger.getLogger("org.apache.http.wire").setLevel(java.util.logging.Level.FINEST);
java.util.logging.Logger.getLogger("org.apache.http.headers").setLevel(java.util.logging.Level.FINEST);
System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire", "ERROR");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http", "ERROR");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http.headers", "ERROR");

18

log4j의 경우 다음을 log4j.properties애플리케이션의 source디렉토리 에 추가하십시오 .

log4j.logger.org.apache=WARN
log4j.logger.httpclient=WARN

로그 백의 경우 다음 logback.xml이 노이즈를 제거합니다.

<configuration>
    <logger name="org.apache" level="WARN" />
    <logger name="httpclient" level="WARN" /> 
</configuration>

1
log4j를 사용하고 있습니다. 로그 솔버에서 처음 두 줄을 추가하면 문제가 완전히 해결됩니다. 다른 모든 로그 메시지는 내가 설정 한 수준에 따라 나타납니다. 아파치 로그는 그렇지 않습니다. 큰 도움이됩니다. 감사.
Arun Thundyill Saseendran

상황에 따라 다를 수 있지만 AWS SDK를 사용하여 즉시 자세한 로깅을 비활성화하려면 이것이 유일한 방법입니다.
Matt Baker

11

그것은이를 찾기 위해 너무 오래 걸렸지 만 jWebUnit을가 번들로 제공 Logback의 로깅 구성 요소, 심지어 사용하지 않도록 log4j.properties하거나 commons-logging.properties.

대신, 파일을 만들어 logback.xml소스 코드 폴더 (내 경우에는 src) 에 넣으십시오 .

<configuration debug="false">
  <!-- definition of appender STDOUT -->
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
    </encoder>
  </appender>

  <root level="ERROR">
    <!-- appender referenced after it is defined -->
    <appender-ref ref="STDOUT"/>
  </root> 
</configuration>

로그 백은 여전히 ​​개발 중이며 API는 계속 변경되는 것으로 보이므로이 코드 샘플은 나중에 실패 할 수 있습니다. 이 StackOverflow 질문 도 참조하십시오 .


1
당신은 아름다움. 이 때문에 고양이를 거의 죽였습니다. 나를 미치게했다.
Manish Patel

이것이 나를위한 해결책이었습니다. 전 이적으로 포함 된 로그 백을 포함하는 다른 라이브러리 때문에이 로거에 고정되어 있다고 생각합니다.
Nathan

10

JUnit과 함께 RestAssured를 사용하는 동안이 문제가 발생했습니다. 나 에게이 프로그래밍 방식은 효과적이었습니다.

@BeforeClass
public static void setUpClass() {
    ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger) org.slf4j.LoggerFactory.getLogger("org.apache.http");
    root.setLevel(ch.qos.logback.classic.Level.INFO);

    //...
}

2
환상적인, 그것이 나를 위해 일한 유일한 솔루션입니다. 정말 고마워.
lasote

감사합니다! 테스트 방법을 시작할 때 정확히 동일한 코드를 사용했지만 아무것도하지 않았습니다. 자체 @Before또는 @BeforeClass기능으로 배치하면 아름답게 작동했습니다.
ExactaBox

8

로깅 파일을 구성하기 위해 속성 파일 대신 XML을 사용합니다. 다음 코드는이 채터를 침묵시키기 위해 작동했습니다.

<logger name="org.apache.commons.httpclient">
    <level value="fatal"/>
</logger>

<logger name="httpclient.wire.header">
    <level value="fatal"/>
</logger>

<logger name="httpclient.wire.content">
    <level value="fatal"/>
</logger>

4

log4.properties에서-아래에서와 같이이 org.apache.http세트가 있고 파일에 다른 로거가 설정되어 있지 않습니까?

-org.apache.commons.logging.simplelog.log.org.apache.http=ERROR

또한 org.apache.httplog4j 특성 파일에 지정된 로그 레벨이 없으면 레벨 을 상속합니다 log4j.rootLogger. 따라서 log4j.rootLoggerERROR라고 말하고 org.apache.httplog4j.properties에서 설정을 사용하여 ERROR상속으로 만 메시지 만 기록하도록 설정 한 경우.

최신 정보:

크리에이트 commons-logging.properties파일과에 다음 라인을 추가합니다. 또한이 파일이 CLASSPATH에 있는지 확인하십시오.

org.apache.commons.logging.LogFactory = org.apache.commons.logging.impl.Log4jFactory

완료된 log4j 파일과 OP를 위해 호출 할 코드를 추가했습니다. 이 log4j.properties는 CLASSPATH에 있어야합니다. 나는 지금 stdout을 가정하고 있습니다.

log4j.configuration=log4j.properties 
log4j.rootLogger=ERROR, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%c] %m%n

log4j.logger.org.apache.http=ERROR

로거를 호출하기 위해 클래스에 추가해야하는 코드가 있습니다.

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; 

public class MyClazz
{
    private Log log = LogFactory.getLog(MyClazz.class);
    //your code for the class
}

HttpClient를 사용하기 전에 log4j.properties 파일이 필요하지 않았습니다. src / test / resources / log4j.properties 파일에 줄을 넣으려고했지만 아무런 차이가 없었습니다. log4j.properties에 commons.logging 옵션을 넣는 것이 옳습니까?
Matt Baker

예, 커먼즈 로깅은 log4j의 래퍼입니다. 테스트 클래스에서 로거를 어떻게 호출합니까?
CoolBeans

(업데이트 후) 위의 줄이 내 log4j.properties 파일에서 유일한 줄이었고 여전히 모든 것을 뱉어 냈습니다.
Matt Baker

1
로거를 호출하지 않고 HttpClient가 자체적으로 수행합니다.
Matt Baker

"참고 : Log4j는 HttpClient 배포에 포함되어 있지 않습니다."라는 링크에 나와 있습니다. 따라서 CLASSPATH에 추가해야합니다. stdout (콘솔) 또는 로그 파일에 출력이 표시됩니까? 코드를 사용하여 샘플 log4h 파일을 작성하여 호출합니다.
CoolBeans

4

간단한 방법 Log4j 및 HttpCLient

모든 종속성이 올바른지 확인하고 MD5를 다운로드하십시오!

import org.apache.commons.httpclient.HttpClient;  
import org.apache.log4j.Level;  
import org.apache.log4j.Logger;  

---

Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.WARN);
Logger.getLogger("httpclient.wire.header").setLevel(Level.WARN);
Logger.getLogger("httpclient.wire.content").setLevel(Level.WARN);

HttpClient client = new HttpClient();

main방법으로 배치해야합니까 ?
parsecer

@parsecer 당신은
WiR3D

4

나는 꽤 오랫동안 같은 문제에 시달리고 마침내 이것을 조사하기로 결정했습니다. 문제는 내 프로젝트가 자체에 log4j.xml 파일을 번들로 제공하는 http-builder-0.5.2.jar에 종속되어 있다는 것입니다. 그리고 org.apache.http.wire의 로그 레벨은 DEBUG였습니다! 내가 찾은 방식은 의존성에있는 모든 jar 파일을 통과하고 "jar tvf"를 수행하고 log4j를 grepping하는 것입니다.

이 발견으로 인해 http-builder 종속성 버전을 0.6으로 올리는 최종 솔루션이 생겼지 만 log4j.xml 파일을 jar 파일로 번들링 할 때 개발자의 마음을 사로 잡아야 할 내용이 여전히 문제가되었습니다. 어쨌든, 그것은 아마도이 스레드와 관련이 없을 것입니다. 그러나 이전에 솔루션을 검색 할 때 내 솔루션이 나타나지 않았다는 것을 알았을 때이 솔루션을 언급하는 것이 유용하다고 생각했습니다. 바라건대 누군가가 이것을 유용하게 사용할 수 있기를 바랍니다.


를 사용하는 동안 비슷한 문제가 발생했습니다 <!-- https://mvnrepository.com/artifact/com.fredericboisguerin.excel/excel-reader-writer --> <dependency> <groupId>com.fredericboisguerin.excel</groupId> <artifactId>excel-reader-writer</artifactId> <version>2.1</version> </dependency>. 종속성을 제거하고 로그가 사라졌습니다. 감사합니다!
adom

3

JWebUnit과 동일한 문제가있었습니다. 이진 배포를 사용하는 경우 로그 백이 기본 로거입니다. JWebUnit과 함께 log4j를 사용하려면 다음 단계를 수행하십시오.

  • 제거 된 Logback jar
  • sfl4j에 대한 lod4j 브릿지 라이브러리 추가-slf4j-log4j12-1.6.4.jar
  • log4j.properties 추가

아마도 Logback jar을 제거 할 필요는 없지만 slf4j가 log4j를 사용하도록하려면 추가 단계가 필요합니다.


감사합니다. OpenRdf를 사용할 때도 같은 문제가있었습니다. 이 스레드의 다른 모든 팁은 로그 백 항아리를 제거 할 때까지 아무런 영향을 미치지 않는 것 같습니다. 이제 로그가 매우 조용합니다.
아마 릴리언

3

다음 두 줄은 내 문제를 완전히 해결했습니다.

Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.ERROR);
Logger.getLogger("httpclient").setLevel(Level.ERROR);

이것은 나에게도 효과가 있었지만 나는 필요하지 않았다. Logger.getLogger ( "org.apache.commons.httpclient"). setLevel (Level.ERROR);
Jamel Toms

3

log4j 속성 파일에 아래 행을 추가하면 http 로그가 종료됩니다.-log4j.logger.org.apache.http = OFF


(주 경우, 다음 주에)도 추가 단위 테스트에서 @BeforeClass public static void BeforeClass() { PropertyConfigurator.configure("log4j.properties"); ...}단일 라인 log4j.logger.org.apache.http와 log4j.properties 파일을 = OFF 루트 (단지 SRC 폴더 위)에 있어야합니다
사샤 본드

3

나는 또한 같은 문제가 있었다. [main] DEBUG org.apache.http.wire테스트를 실행하는 동안 콘솔 전체가 채워졌습니다 .

나를 위해 일한 솔루션 은 https://github.com/bonigarcia/webdrivermanager-examples/blob/master/src/test/resources 와 같이 logback-test.xml src / test / resources / logback-test.xml 을 작성하는 것이 었습니다. /logback-test.xml (ref- https: //github.com/bonigarcia/webdrivermanager/issues/203 )

로깅 정보를보기 위해 로거 이름 = "io.github.bonigarcia"를 패키지 이름으로 바꿨습니다.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="com.mypackage" level="DEBUG" />
    <logger name="org" level="INFO" />
    <logger name="com" level="INFO" />

    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>

</configuration>

2

비슷한 문제에 대한 해결책을 찾을 때이 게시물로 연결되었습니다. 팀의 답변은 매우 도움이되었습니다. Matt Baker와 같이 너무 많은 구성없이 httpClient 로그를 종료하고 싶습니다. 공통 로깅 아래에서 어떤 로깅 구현이 사용되었는지 확실하지 않으므로 내 솔루션은 클래스 경로에 log4j jar 파일을 던져서 log4j를 사용하여 강제로 작성하는 것이 었습니다. log4j 구성의 기본 설정은 common-httpclient 디버그 출력을 종료합니다. 물론보다 강력하게하기 위해 common-logging.properties 및 log4j.properties 파일을 작성하여 로깅 구성을 추가로 정의 할 수 있습니다.


2

넣어보십시오

org.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog

commons-logging.properties에서


2

Apache 4.5.3의 경우 모든 Apache http 클라이언트 로깅 레벨을 Warn 으로 이동하려면 다음을 사용하십시오.

log4j.logger.org.apache=WARN

2

클래스 루트 경로와 아래 설정에 "logback.xml"을 추가하면 효과가 있습니다.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <logger name="org.apache" level="WARN"/>
    <logger name="httpclient" level="WARN"/>
</configuration>

1

jwebunit 통합 테스트를 실행할 때도 동일한 문제가 발생했습니다. 로그 백을 제외하고 slf4j-log4j12에 다음과 같이 추가하여 수정했습니다.

<dependency>
  <groupId>net.sourceforge.jwebunit</groupId>
  <artifactId>jwebunit-htmlunit-plugin</artifactId>
  <version>3.0</version>
  <exclusions>
    <exclusion>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
</dependency>

1

이것은 한 번 알아내는 데 나이가 걸렸습니다.

log4j.logger.httpclient.wire=ERROR

HttpClient는 "org.apache.commons.httpclient"가 아닌 "httpclient.wire"를 로거 이름으로 사용합니다.

음흉한 버거.


1

이것은 나를 위해 일했습니다.

System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire.header", "error");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http", "error");
System.setProperty("log4j.logger.org.apache.http", "error");
System.setProperty("log4j.logger.org.apache.http.wire", "error");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient", "error");

0

내가 찾은 가장 좋은 해결책은 커먼즈 로깅이 완전히 사용되는 것을 막기 위해 메이븐 집행자 플러그인을 사용하는 것입니다. 그런 다음 로깅을 위해 slf4j 종속성을 추가했습니다. 따라서 pom.xml에 다음을 추가하십시오.

<dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>[your version here]</version>
    </dependency>

또한 maven-enforcer 플러그인을 추가하십시오

<plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-enforcer-plugin</artifactId>
           <version>[your version here]</version>
           <executions>
               <execution>
                   <id>enforce</id>
                   <configuration>
                       <rules>
                           <DependencyConvergence />
                           <bannedDependencies>
                               <excludes>
                                   <exclude>commons-logging:commons-logging</exclude>
                               </excludes>
                           </bannedDependencies>
                       </rules>
                   </configuration>
                   <goals>
                       <goal>enforce</goal>
                   </goals>
               </execution>
           </executions>
       </plugin>

Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M2:enforce (enforce) on project gs-serving-web-content: Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed
parsecer

0

나머지 템플릿에 대해 HttpComponentsClientHttpRequestFactory를 설정 한 후 이러한 문제가 발생했습니다.

OkHttpClientHttpRequestFactory를 설정하면 휴지통 로깅 문제를 해결해야합니다.


0

이 두 가지 종속성을 pom 파일에 추가하기 만하면 됩니다.

<!--Using logback-->
<dependency>
   <groupId>commons-logging</groupId>
   <artifactId>commons-logging</artifactId>
   <version>1.2</version>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-logging</artifactId>
</dependency>

Commons-Logging-> Logback 및 Debug 동안 기본 정보가 없습니다. 당신이 사용할 수있는:

private static Logger log = LoggerFactory.getLogger(HuaweiAPI.class);

최종 결과 와 같이 기록하려는 정보를 정의합니다 . 기록하려는 정보 만 나타납니다.


0

나는 위의 모든 해결책을 시도했지만 아무 소용이 없었다. 나에게 가장 가까운 곳은 logback.xml을 만들 것을 제안하는 곳이었다. 그것은 효과가 있었지만 아무것도 기록되지 않았습니다. logback.xml로 놀아 본 결과 이것이 내가 끝낸 것입니다.

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <withJansi>true</withJansi>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    </encoder>
  </appender>
  <root level="INFO">
    <appender-ref ref="STDOUT"/>
  </root>
</configuration>

이제 DEBUG 아래의 모든 수준이 올바르게 기록됩니다.


0

와:

  • Log2J 2 2.11.2
  • HttpClient 4.5.7 (elasticsearch 7.0.0 나머지 클라이언트)
  • 특성 파일을 사용하여 구성

하나를 추가 할 수 있습니다.

logger.httpclient.name=org.apache.http
logger.httpclient.level=info

위의 예에서 'httpclient'를 선택하면 논리적 이름이됩니다.

(Java 11 OpenFX 응용 프로그램에서 테스트되었습니다.)


0

제 경우에는 xml 구성을 사용하고 이것을 구성 파일에 추가합니다.

<logger name="org.apache.http">
    <level value="warn"/>
</logger>

0

'log4j.logger.org.apache.http.headers = ERROR'를 시도하십시오


0

나를 위해, log4j prop 파일의 아래 줄은 HttpClient 로깅에서 온 모든 혼란을 정리했습니다 ... Hurray !!! :)

log4j.logger.org.apache.http.headers=ERROR
log4j.logger.org.apache.http.wire=ERROR
log4j.logger.org.apache.http.impl.conn.PoolingHttpClientConnectionManager=ERROR
log4j.logger.org.apache.http.impl.conn.DefaultManagedHttpClientConnection=ERROR
log4j.logger.org.apache.http.conn.ssl.SSLConnectionSocketFactory=ERROR
log4j.logger.org.springframework.web.client.RestTemplate=ERROR
log4j.logger.org.apache.http.client.protocol.RequestAddCookies=ERROR
log4j.logger.org.apache.http.client.protocol.RequestAuthCache=ERROR
log4j.logger.org.apache.http.impl.execchain.MainClientExec=ERROR
log4j.logger.org.apache.http.impl.conn.DefaultHttpClientConnectionOperator=ERROR
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.