Ich verwende commons-httpclient 3.1 in einer Integrationstestsuite. Die Standardprotokollierung für HttpClient ist extrem laut und ich kann sie anscheinend nicht deaktivieren. Ich habe versucht, den Anweisungen hier zu folgen , aber keine davon macht einen Unterschied.
Meistens muss ich nur den org.apache.http.wire-Logger zum Schweigen bringen. Ein Teil des Problems ist, dass ich nicht weiß, welche Art von Logger HttpClient zu verwenden versucht, und das meiste Problem ist, dass ich diese Bibliothek noch nie zuvor verwendet habe. Ich habe versucht, eine log4j.properties-Datei zu erstellen und in meinem Ordner test / resources abzulegen, die Master-Datei logging.properties in jre / lib zu ändern und die verschiedenen Protokollierungsoptionen wie auf der Protokollierungsseite angegeben an Maven zu senden , und keine davon einen Unterschied machen.
Jede Hilfe wird geschätzt ... das macht mich verrückt.
UPDATE: Eine Korrektur: Es scheint, dass die fragliche Ausgabe tatsächlich durch die Verwendung von HttpClient durch jwebunit stammt, nicht durch meine eigene. In jedem Fall ist es nicht wünschenswert.
UPDATE: Danke für die bisherigen Versuche. Ich habe alles versucht, was unten vorgeschlagen wurde, aber immer noch kein Glück. Ich habe eine Datei commons-logging.properties in meinem Ordner src / test / resources mit dem folgenden Inhalt
org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.Log4jFactory
log4j.configuration=log4j.properties
und eine Datei log4j.properties im selben Ordner mit dem folgenden Inhalt
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
Wenn ich jedoch meine Tests durchführe, erhalte ich immer noch eine Reihe solcher Ausgaben:
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]"
Diese Ausgabe für alles, was über den Draht kommt, macht diese Bibliothek für mich unbrauchbar ... bis ich herausfinden kann, wie ich sie ausschalten kann. Muss ich etwas Besonderes tun, damit diese Protokollkonfiguration eingelesen wird?
quelle
-Dlog4j.debug
Ihre VM-Optionen erweitern, um sicherzustellen, dass die richtige Konfigurationsdatei geladen wirdpublic class Main { static { System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog"); } // Rest of class as before }
Antworten:
Update
log4j.properties
mit:Beachten Sie, dass HttpClient (und damit JWebUnit) Logback verwendet, wenn die Log4j-Bibliothek nicht installiert ist. Erstellen oder bearbeiten Sie
logback.xml
in dieser Situation Folgendes :Das Festlegen der Protokollebene
WARN
mit Log4j unter Verwendung des Paketnamensorg.apache.commons.httpclient
inlog4j.properties
funktioniert nicht wie erwartet:Dies liegt daran, dass die Quelle für HttpClient (v3.1) die folgenden Protokollnamen verwendet:
quelle
Hinweis: Einige dieser Antworten wiederholen möglicherweise Dinge, die Sie bereits kennen (oder zu wissen glauben), aber es gibt ein paar Fehlinformationen zu dieser Frage, daher werde ich am Anfang beginnen und alles darlegen
java.util.logging
(JDK1.4-Protokollierung).java.util.logging
).log4j.jar
zum Klassenpfad wird geändert, welcher Protokollierungsmechanismus verwendet wird, was wahrscheinlich nicht das ist, was Sie möchtencommons-logging.properties
Datei gemäß diesen Anweisungen erstellenlog4j
oderjava.util.logging
sind die besten Optionen für Sie.Log
Implementierung verweist. Um beispielsweise log4j zu verwenden, fügen Sie dies in die Eigenschaftendatei ein:org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
oder verwenden Sie den JDK-Protokollierungssatzorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger
. Diese können auch als Systemeigenschaften festgelegt werden (z. B.-D
über die Befehlszeile).Das sind viele Schritte, aber das ist es, was es braucht. Die Entwickler von Apache-commons gehen in der Regel davon aus, dass Sie bereits ein Protokollierungsframework konfiguriert haben, und können durch automatische Erkennung herausfinden, um welches Framework es sich handelt.
Wenn das für Sie nicht zutrifft, ist es in der Regel etwas mehr Arbeit, um die Dinge zum Laufen zu bringen.
quelle
Ich habe dies in meine log4j-Konfigurationsdatei eingefügt
Dies begrenzt die Ausgabe auf Warnstufe oder höher
quelle
Dies funktionierte für meine Tests;
quelle
Fügen Sie für log4j Folgendes hinzu
log4j.properties
(imsource
Verzeichnis der Anwendung ):Bei der Rückmeldung
logback.xml
wird das Rauschen durch Folgendes gelöscht :quelle
Es hat viel zu lange gedauert, um dies herauszufinden, aber JWebUnit wird mit der Logback- Protokollierungskomponente geliefert , sodass es nicht einmal
log4j.properties
oder verwendetcommons-logging.properties
.Erstellen Sie stattdessen eine Datei mit dem Namen
logback.xml
und legen Sie sie in Ihrem Quellcode-Ordner ab (in meinem Fallsrc
):Logback scheint sich noch in der Entwicklung zu befinden und die API scheint sich noch zu ändern, sodass dieses Codebeispiel möglicherweise in Zukunft fehlschlägt. Siehe auch diese StackOverflow-Frage .
quelle
Ich hatte dieses Problem bei der Verwendung von RestAssured mit JUnit. Für mich hat dieser programmatische Ansatz funktioniert:
quelle
@Before
oder@BeforeClass
Funktion hat wunderbar funktioniert.Wir verwenden XML anstelle einer Eigenschaftendatei, um unsere Protokollausgabe zu konfigurieren. Der folgende Code hat dieses Geschwätz zum Schweigen gebracht.
quelle
In Ihren log4.properties - haben Sie dieses Set wie unten und keine anderen
org.apache.http
Logger in der Datei?Auch wenn
org.apache.http
in Ihrer log4j-Eigenschaftendatei keine Protokollebene angegeben ist, erbt diese dielog4j.rootLogger
Ebene. Wenn Sielog4j.rootLogger
also ERROR festgelegt haben undorg.apache.http
Einstellungen in Ihren log4j.properties vornehmen, solltenERROR
Nachrichten nur durch Vererbung protokolliert werden.AKTUALISIEREN:
Erstellen Sie eine
commons-logging.properties
Datei und fügen Sie die folgende Zeile hinzu. Stellen Sie außerdem sicher, dass sich diese Datei in Ihrem CLASSPATH befindet.Es wurde eine fertige log4j-Datei und der Code zum Aufrufen für das OP hinzugefügt. Diese log4j.properties sollten sich in Ihrem CLASSPATH befinden. Ich gehe für den Moment von Standard aus.
Hier ist ein Code, den Sie Ihrer Klasse hinzufügen müssen, um den Logger aufzurufen.
quelle
Einfacher Weg Log4j und HttpCLient (v3.1 in diesem Fall, sollte für höhere arbeiten, könnte geringfügige Änderungen erfordern)
Stellen Sie sicher, dass alle Abhängigkeiten korrekt sind und MD5 Ihre Downloads !!!!
quelle
main
Methode setzen?Ich bin schon seit einiger Zeit von demselben Problem geplagt und habe mich schließlich entschlossen, dies zu untersuchen. Es stellte sich heraus, dass mein Projekt eine Abhängigkeit von http-builder-0.5.2.jar hatte, die eine log4j.xml-Datei in sich selbst bündelte. Und sicher war die Protokollstufe für org.apache.http.wire DEBUG! Die Art und Weise, wie ich es fand, war nur, alle JAR-Dateien in meinen Abhängigkeiten durchzugehen und "JAR-TVF" zu machen und nach log4j zu suchen.
Diese Entdeckung führte zwar zu der möglichen Lösung, die Version meiner http-Builder-Abhängigkeit auf 0,6 zu erhöhen, aber es verwirrt mich immer noch, was dem Entwickler beim Bündeln der Datei log4j.xml in die JAR-Datei durch den Kopf gegangen sein muss. Jedenfalls ist das für diesen Thread momentan wahrscheinlich nicht relevant. Aber ich dachte, es ist nützlich, diese Lösung zu erwähnen, die ich gefunden habe, da meine bei der Suche nach einer Lösung noch nie aufgetaucht ist. Hoffentlich findet das jemand nützlich.
quelle
<!-- 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>
. Die Abhängigkeit wurde entfernt und die Protokolle wurden entfernt. Danke dir!Ich hatte das gleiche Problem mit JWebUnit. Bitte beachten Sie, dass bei Verwendung der Binärverteilung Logback ein Standardlogger ist. Um log4j mit JWebUnit zu verwenden, habe ich folgende Schritte ausgeführt:
Wahrscheinlich müssen Sie keine Logback-Jars entfernen, aber Sie benötigen einen zusätzlichen Schritt, um slf4j zur Verwendung von log4j zu zwingen
quelle
Die folgenden 2 Zeilen haben mein Problem vollständig gelöst:
quelle
Fügen Sie die folgenden Zeilen in die Eigenschaftendatei log4j ein, um die http-Protokolle zu schließen: - log4j.logger.org.apache.http = OFF
quelle
@BeforeClass public static void BeforeClass() { PropertyConfigurator.configure("log4j.properties"); ...}
Fügen Sie in Unit-Tests (wenn main, dann in main) auch die Datei log4j.properties mit der einzelnen Zeile hinzu. log4j.logger.org.apache.http = OFF sollte sich im Stammverzeichnis (direkt über dem Ordner src) befindenIch hatte auch das gleiche Problem. Die gesamte Konsole wurde
[main] DEBUG org.apache.http.wire
während der Ausführung der Tests gefüllt .Die Lösung, die für mich funktioniert hat, war das Erstellen einer logback-test.xml src / test / resources / logback-test.xml wie unter https://github.com/bonigarcia/webdrivermanager-examples/blob/master/src/test/resources /logback-test.xml (ref - https://github.com/bonigarcia/webdrivermanager/issues/203 )
Um meine Protokollinformationen anzuzeigen, habe ich logger name = "io.github.bonigarcia" durch meinen Paketnamen ersetzt
quelle
Ich wurde zu diesem Beitrag geführt, als ich nach einer Lösung für ein ähnliches Problem suchte. Tims Antwort war sehr hilfreich. Wie Matt Baker möchte ich nur das httpClient-Protokoll ohne zu viel Konfiguration schließen. Da wir nicht sicher waren, welche Protokollierungsimplementierung unter der allgemeinen Protokollierung verwendet wurde, bestand meine Lösung darin, die Verwendung von log4j zu erzwingen, indem die JAR-Datei log4j in den Klassenpfad geworfen wurde. Die Standardeinstellung der log4j-Konfiguration schaltet die Common-httpclient-Debug-Ausgabe aus. Um die Robustheit zu erhöhen, können Sie natürlich die Dateien common-logging.properties und log4j.properties erstellen, um Ihre Protokollierungskonfigurationen weiter zu definieren.
quelle
Versuchen Sie es
in Ihren commons-logging.properties
quelle
Verwenden Sie für Apache 4.5.3 Folgendes, wenn Sie die Ebene für alle Apache-HTTP-Client-Protokollierungen auf Warnen verschieben möchten :
quelle
Es funktioniert für mich mit dem Hinzufügen von "logback.xml" im Klassenstammpfad und unter der Einstellung.
quelle
Ich hatte das gleiche Problem beim Ausführen von Jwebunit-Integrationstests. Ich habe es behoben, indem ich logback ausgeschlossen und slf4j-log4j12 hinzugefügt habe, wie folgt:
quelle
Ich habe ewig gebraucht, um es einmal herauszufinden. Du brauchst Folgendes:
Ich denke, HttpClient verwendet "httpclient.wire" als Loggernamen, nicht "org.apache.commons.httpclient".
Hinterhältige Kerle.
quelle
Das hat bei mir funktioniert.
quelle
Die beste Lösung, die ich gefunden habe, war die Verwendung des Maven Enforcer-Plugins, um zu verhindern, dass Commons-Logging insgesamt verwendet wird. Dann habe ich stattdessen die slf4j-Abhängigkeit für die Protokollierung hinzugefügt. Fügen Sie also Folgendes zu Ihrer pom.xml hinzu
und fügen Sie auch das Maven-Enforcer-Plugin hinzu
quelle
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
Ich habe ein solches Problem festgestellt, nachdem ich HttpComponentsClientHttpRequestFactory für meine Restvorlage festgelegt habe.
Durch Festlegen von OkHttpClientHttpRequestFactory sollte das Problem mit der Papierkorbprotokollierung behoben werden.
quelle
Fügen Sie einfach diese beiden Abhängigkeiten in die POM-Datei ein: Ich habe versucht, erfolgreich zu sein, nachdem ich die Diskussion zuvor versucht habe.
Commons-Logging -> Logback und Standardinfo, während Debug nicht vorhanden ist; Sie können verwenden:
So definieren Sie die Informationen, die Sie protokollieren möchten: Gefällt mir das Endergebnis wie folgt. Es sind nur die Informationen vorhanden, die ich protokollieren möchte.
quelle
Ich habe alle oben genannten Lösungen ohne Erfolg ausprobiert. Die einzige Lösung, die mir am nächsten kam, war die, die vorschlug, eine logback.xml zu erstellen. Das hat funktioniert, aber es wurde nichts protokolliert. Nachdem ich mit der logback.xml herumgespielt hatte, kam ich zu diesem Ergebnis
Jetzt werden alle Ebenen unter DEBUG korrekt protokolliert.
quelle
Mit:
Man kann hinzufügen:
Wenn 'httpclient' im obigen Beispiel ein logischer Name ist, den Sie wählen.
(Getestet mit Java 11 OpenFX.)
quelle
In meinem Fall verwende ich die XML-Konfiguration und hänge diese an die Konfigurationsdatei an
quelle
Versuchen Sie 'log4j.logger.org.apache.http.headers = ERROR'
quelle
Für mich haben die folgenden Zeilen in der log4j-Prop-Datei all das Durcheinander beseitigt, das durch die HttpClient-Protokollierung entstanden ist ... Hurra !!! :) :)
quelle