12

これは、bash ファイルに関するこの質問に似ています。

TestNG テストの実行中にコンソールに出力されるログを作成しました。

private Log log = LogFactory.getLog(xyz.class);

後で、テスト中に、ログには詳細が入力され、正確に何が行われているかを知ることができます。

log.info("Setting browser...");
this.browser = browser;
log.info("Completed.");

現在、期待どおりに印刷されています。

Setting browser...
Completed.

これを同じ行に出力したい:

Setting browser...

そして数ミリ秒後:

Setting browser...Completed.

これは LogFactory で可能ですか?

4

3 に答える 3

9

使用しているログ ライブラリを正確に知らなくても、他の場所で改行文字を明示的に指定したい場合を除き、答えはほぼ間違いないと思います。

(java.util.loggingおよびLog4J) フレームワークを使用すると、フォーマッターをプラグインしてステートメントをフォーマットできます。改行文字で終わらない形式を指定する必要があります。たとえば、Log4Jで。彼らはパターンの例を次のように与えます

 %-5p [%t]: %m%n

したがって、を除くすべてを削除した場合%m(the%nは改行であり、他のものには時刻とログレベルが含まれます。それぞれだ%t%p思います)、改行は各ステートメントに自動的に追加されません。

ただし、これは、他の場所では、他のログ ステートメントが次のようになることを意味します。

log.info("I want this on one line\n");
于 2012-06-25T19:39:33.480 に答える
4

ログはそのままにしておきます。読みやすくしたい場合は、後処理してください。

注意しないと、ログファイルをいじると情報が失われます。例としてタイムスタンプを見てください。Setting browswer..ログステートメントにタイムスタンプが含まれている場合、completedそのタイムスタンプなしでステートメントを配置すると情報が失われ、同じ行に2つのタイムスタンプがあるのは自然ではないようです。

于 2012-06-25T20:29:47.563 に答える
0

slf4j-api実装でを使用する場合、ロガー構成の変更を必要としない単純な代替方法を次に示しlogbackます。

Logger.printf次のように、メソッドを使用して実現できます。

輸入品

import org.slf4j.Logger
import org.slf4j.LoggerFactory

...

ロガー インスタンス

private static final Logger log = LoggerFactory.getLogger(YourClass.class)

...

ループ内

...

log.printf("> Processed %d/%d\r", ++yourCounter, maxCounter) // Will log in the same line due to \r

...

サンプル出力

22:12:15.169 [main] INFO  your.package.YourClass - Previous log output a...
22:12:15.170 [main] INFO  your.package.YourClass - Previous log output b...
22:12:15.170 [main] INFO  your.package.YourClass - Previous log output c...
> Processed 1398/4096
于 2019-03-07T03:29:55.070 に答える