Log4J を使用して出力を出力するコンソール アプリケーションがあります。デフォルトでは非表示になっているデバッグ メッセージもオプションで表示するスイッチを簡単に実装できるため、これは便利です。
このアプリケーションには、プログレス バーが適切な、実行時間の長いアクションがいくつかあります。
Log4J または LogBackを使用してこれを実装する最良の方法は何ですか?
Log4J を使用して出力を出力するコンソール アプリケーションがあります。デフォルトでは非表示になっているデバッグ メッセージもオプションで表示するスイッチを簡単に実装できるため、これは便利です。
このアプリケーションには、プログレス バーが適切な、実行時間の長いアクションがいくつかあります。
Log4J または LogBackを使用してこれを実装する最良の方法は何ですか?
プログレスバーまたは何らかの更新テキストをコンソールに書き込むには、\r
(改行) の代わりに (改行) で出力を終了\n
し、次の行で上書きします。この質問はさらに詳しく説明します。F-ANSIライブラリを使用すると、前の行を上書きするなど、見栄えの良いコンソール出力を簡単に生成できます。
しかし、ロギング フレームワークを使用することに設定されている場合、これは不可能であるだけでなく、望んでいるものでもありません。ChrisM が示唆するように、進行状況をログに記録する正しい方法は、これまでに完了したパーセントで頻繁に新しい行をログに記録することです。このようにして、プログラムが実行していることと、コンテキスト内での進行状況の両方を確認できます。
あなたがやりたいように聞こえるのは、ログをプログラムの実際の出力から分離することです (進行状況バーの問題を無視しても、これは一般的に良い考えです)。ログ フレームワークを使用して、プログラムの実行に関する情報をログに記録します。stdout
実際のプログラムの出力は、経由で直接書き込まれるべきですSystem.out
。
次に、ロギングで何をしたいかを個別に決定できます。に書き込むこともできstdout
、ログと出力を一緒にstderr
保存できますが、(リダイレクトがはるかに簡単になる)またはログファイル(プログラムの出力がきれいになり、参照用にログを保持する)に書き込む方がよいでしょう。後で)。
また、Java が前提条件でない場合、pv
コマンドは、パイプされたデータの量に基づいて、強力でカスタマイズ可能な進行状況バーを提供します。