プログラムで直接出力をキャプチャするか、コンソールで出力をキャプチャできます。
コンソール上
絶対にすべて (STDOUT と STDERR の両方) を取得したい場合は、STDOUT (System.out から) と STDERR (System.err から) をリダイレクトする必要があります。両方を同じファイルにリダイレクトする (> log.txt 2>&1
コンソール コマンドの末尾に追加する) か、別のファイルに記録する (> BatchMain.log 2> BatchMain.err
コンソールの末尾に追加する) ことができます。
log.txt という 1 つのファイルにログを記録します。
java -server -Xms512m -Xmx512m -XX:PermSize=512m -XX:MaxPermSize=512m -Duser.timezone=GMT-7 –jar BatchMain.jar -taskId V3-PERSONALIZATIONGEO-SAMPLE-TASK -noofthreads 1 -timeout 5 -numberOfIP 1000 -privateIPAddress false > log.txt 2>&1
別のファイル、BatchMain.log および BatchMain.err にログを記録します。
java -server -Xms512m -Xmx512m -XX:PermSize=512m -XX:MaxPermSize=512m -Duser.timezone=GMT-7 –jar BatchMain.jar -taskId V3-PERSONALIZATIONGEO-SAMPLE-TASK -noofthreads 1 -timeout 5 -numberOfIP 1000 -privateIPAddress false > BatchMain.log 2> BatchMain.err
プログラム内で直接
main(String[] args)
メソッド (または他の適切な場所) で、System.out と System.err をファイル (または必要に応じて同じファイル) に直接出力するように設定します。例えば:
package com.example.logging;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
public class LogToFiles {
public static void main(String[] args) throws FileNotFoundException {
System.setOut(new PrintStream("example.log"));
System.setErr(new PrintStream(new FileOutputStream("example.err"), true));
System.out.println("System.out example");
System.err.println("System.err example");
}
}
出力をコンソールにも表示したい場合は、さらに一歩進んで、これを行う独自の中間 PrintStream を挿入できます。
その他の考慮事項
Java は System.out をバッファリングするので、STDOUT と STDERR の両方を同じファイルに記録すると、2 つの PrintStreams が織り交ぜられた無意味な出力になってしまう可能性があることに注意してください。 STDERR に出力されます。1 つの回避策は、必要に応じて を呼び出すSystem.out.flush()
ことですが、大量のテキストを に記録している場合、パフォーマンスが低下する可能性がありますSystem.out
。
すべてをコンソールにSystem.out.println()
出力してその出力を取得しようとするのではなく、 Java LoggingまたはLog4Jを使用するか、さらに一歩進んでApache Commons Loggingを使用することをお勧めします。これは、最初の 2 つのシステムのいずれかを内部的に使用するように構成できます。本当に素晴らしいのは、どのクラスが各ログ メッセージを出力したかを推測する必要がないことです。これは自動的に取得されるためです。
ロギング フレームワークを使用している場合は、1 つの変数を設定することでロギング出力の詳細度を調整することもできます。これはリリース時に役立ちます。