統合テストスイートでcommons-httpclient 3.1を使用しています。 HttpClientのデフォルトのロギングは非常にノイズが多く、オフにすることはできません。私は指示 ここ に従ってみましたが、どれも違いはありません。
ほとんどの場合、org.Apache.http.wireロガーをシャットダウンするだけです。問題の一部は、HttpClientがどのタイプのロガーを使用しようとしているかわからないことであり、問題のほとんどは、このライブラリを使用したことがないということです。 log4j.propertiesファイルを作成してtest/resourcesフォルダーにドロップし、jre/libのマスターlogging.propertiesファイルを変更し、 で指定されているようにさまざまなログオプションをMavenに送信しようとしましたロギングページ 、およびそれらのどれも違いを生じません。
どんな助けも大歓迎です...これは私に夢中にさせています。
UPDATE:修正:問題の出力は、実際にはjwebunitのHttpClientの使用によるものであり、自分のものではないようです。どちらにしても、それは望ましくありません。
UPDATE:これまでの試みに感謝します。以下に提案するすべてを試しましたが、それでも運はありません。 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]"
ネットワーク全体に出てくるすべてのこの出力により、このライブラリは使用できなくなります...それをオフにする方法がわかるまでです。このログ設定を読み込むために必要な特別なことはありますか?
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>
パッケージ名org.Apache.commons.httpclient
in log4j.properties
を使用してLog4jでログレベルをWARN
に設定します動作しません期待どおり:
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"));
注:この答えの一部は、すでに知っている(または知っていると思う)ことを繰り返すかもしれませんが、この質問には誤解が少しありますので、始まり、それをすべて綴ります
Java.util.logging
(JDK1.4ロギング)にも記録できますJava.util.logging
)log4j.jar
を追加するだけで、使用するロギングメカニズムが切り替わります。commons-logging.properties
ファイルを作成します。log4j
またはJava.util.logging
が最適なオプションです。Log
実装を指すようにします。例えばlog4jを使用するには、これをプロパティファイルorg.Apache.commons.logging.Log=org.Apache.commons.logging.impl.Log4JLogger
に配置するか、JDKロギングセットorg.Apache.commons.logging.Log=org.Apache.commons.logging.impl.Jdk14Logger
を使用します。これらは、システムプロパティとして設定することもできます(たとえば、コマンドラインで-D
を使用)。それは多くのステップですが、それはそれが取るものです。 Apache-commonsの開発者は、すでにロギングフレームワークが設定されていると想定しがちであり、自動検出によってそれがどれであるかを判断できます。
それがあなたに当てはまらない場合は、物事を実行するためにもう少し手間がかかる傾向があります。
これをlog4j設定ファイルに入れます
log4j.logger.org.Apache.http.wire=WARN
これにより、出力が警告レベル以上に制限されます
これは私のテストで機能しました。
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");
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>
これを見つけるのに時間がかかりすぎましたが、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>
Logbackはまだ開発中のようで、APIはまだ変更されているようです。そのため、このコードサンプルは将来失敗する可能性があります。 このStackOverflowの質問 も参照してください。
プロパティファイルではなく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>
RestAssuredをJUnitで使用しているときにこの問題が発生しました。私にとって、このプログラムによるアプローチはうまくいきました。
@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);
//...
}
あなたのlog4.propertiesで-あなたは私が下にあるようにこのセットを持っていますか、他のorg.Apache.http
ロガーはファイルに設定されていませんか?
-org.Apache.commons.logging.simplelog.log.org.Apache.http=ERROR
また、log4jプロパティファイルのorg.Apache.http
にログレベルが指定されていない場合は、log4j.rootLogger
レベルを継承します。したがって、log4j.rootLogger
をERRORに設定し、log4j.propertiesのorg.Apache.http
設定を取り出して、継承によってのみERROR
メッセージのみを記録する必要がある場合は、.
更新:
commons-logging.properties
ファイルを作成し、次の行を追加します。また、このファイルがCLASSPATHにあることを確認してください。
org.Apache.commons.logging.LogFactory = org.Apache.commons.logging.impl.Log4jFactory
完成したlog4jファイルと、OP用にそれを呼び出すコードを追加しました。このlog4j.propertiesはCLASSPATHにある必要があります。今のところ標準出力を想定しています。
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
}
私は今かなり長い間同じ問題に悩まされてきており、最終的にこれを調べることにしました。この問題は、私のプロジェクトがhttp-builder-0.5.2.jarに依存しており、その中にlog4j.xmlファイルがバンドルされていることが判明しました。確かに、org.Apache.http.wireのログレベルはDEBUGでした!私が見つけた方法は、依存関係にあるすべてのjarファイルを調べて、「jar tvf」を実行し、log4jをgreppingするだけでした。
この発見により、最終的にhttp-builder依存関係のバージョンを0.6に上げるという解決策に至りましたが、log4j.xmlファイルをjarファイルにバンドルする際に開発者の心を突き抜けていたはずのことは、まだ私を困惑させます。とにかく、それはおそらく今のところこのスレッドには関係ありません。しかし、私が見つけたこの解決策について言及することは有用であると考えました。これまでに解決策を探していたとき、私の解決策が思い浮かびませんでした。うまくいけば、誰かがこれを役に立つと思うでしょう。
Log4jとHttpCLientの簡単な方法(この場合、v3.1はより高いレベルで動作するはずで、小さな変更が必要になる場合があります)
すべての依存関係が正しいことを確認し、ダウンロードを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();
JWebUnitでも同じ問題がありました。バイナリ配布を使用する場合、Logbackはデフォルトのロガーであることに注意してください。 JWebUnitでlog4jを使用するには、次の手順を実行しました。
おそらく、Logback jarを削除する必要はありませんが、slf4jにlog4jを強制的に使用させるための追加の手順が必要になります。
次の2行は私の問題を完全に解決しました。
Logger.getLogger("org.Apache.commons.httpclient").setLevel(Level.ERROR);
Logger.getLogger("httpclient").setLevel(Level.ERROR);
同様の問題の解決策を探しているときに、私はこの投稿に導かれました。ティムの答えはとても役に立ちました。 Matt Bakerのように、あまり多くの設定をせずにhttpClientログを停止したいだけです。 common-loggingの下のどのロギング実装が使用されているのかわからなかったため、私の解決策は、log4j jarファイルをクラスパスにスローしてlog4jを使用することでした。log4j構成のデフォルト設定はcommon-httpclientデバッグ出力をシャットオフしました。もちろん、より堅牢にするために、common-logging.propertiesおよびlog4j.propertiesファイルを作成して、ロギング構成をさらに定義できます。
Apache 4.5.3の場合、すべてのApache httpクライアントロギングのレベルをWarnに移動するには、次を使用します。
log4j.logger.org.Apache=WARN
Log4jプロパティファイルに以下の行を追加すると、httpログが閉じられます。-log4j.logger.org.Apache.http = OFF
入れてみて
org.Apache.commons.logging.Log=org.Apache.commons.logging.impl.NoOpLog
commons-logging.propertiesで
Jwebunit統合テストを実行しているときにも同じ問題が発生しました。次のように、logbackを除外して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>
私も同じ問題を抱えていました。テストの実行中、コンソール全体が[main] DEBUG org.Apache.http.wire
でいっぱいになりました。
私のために働いた解決策は、logback-test.xmlsrc/test/resources/logback-testを作成することでした.xmlhttps://github.com/bonigarcia/webdrivermanager-examples/blob/master/src/test/resources/logback-test.xml ( ref- https://github.com/bonigarcia/webdrivermanager/issues/2 )
ログ情報を表示するために、ロガーname = "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>
これを理解するのに何年もかかりました、あなたはこれが必要です:
log4j.logger.httpclient.wire=ERROR
HttpClientはロガー名として「org.Apache.commons.httpclient」ではなく「httpclient.wire」を使用していると思います。
卑劣な盗賊。
私が見つけた最良の解決策は、commons-loggingが完全に使用されるのを防ぐために、Mavenエンフォーサプラグインを使用することでした。次に、代わりにロギングの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>
私の場合、xml構成を使用し、これを構成ファイルに追加します
<logger name="org.Apache.http">
<level value="warn"/>
</logger>
と:
以下を追加できます。
logger.httpclient.name=org.Apache.http
logger.httpclient.level=info
上記の例の「httpclient」は、選択した論理名です。
(Java 11 OpenFXアプリケーションでテスト済み。)
「log4j.logger.org.Apache.http.headers = ERROR」を試してください
上記のすべてのソリューションを試してみましたが、役に立ちませんでした。私にとって最も近いものは、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以下のすべてのレベルが正しく記録されるようになりました。
pomファイルにこれらの2つの依存関係を追加するだけです:議論を試みた後に成功しました。
<!--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->デバッグが存在しない間のログバックとデフォルト情報。次を使用できます。
private static Logger log = LoggerFactory.getLogger(HuaweiAPI.class);
記録する情報を定義するには:like Final Result like記録したい情報のみが表示されます。
残りのテンプレートにHttpComponentsClientHttpRequestFactoryを設定した後、このような問題が発生しました。
OkHttpClientHttpRequestFactoryを設定することで、ゴミ箱のログに関する問題を解決できます。