1

Windows 7 コマンド プロンプトで発生しているすべてのことをファイルに保存する方法はありますか。コンソールに出力されたものを見ることができるように。コマンドプロンプトからマルチスレッドJavaプログラムを実行しています-

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

そして、コマンド プロンプトに多くの情報を出力します。コンソールに表示されるこれらすべての情報をファイルに保存したいと考えています。

4

3 に答える 3

1

プログラムで直接出力をキャプチャするか、コンソールで出力をキャプチャできます。

コンソール上

絶対にすべて (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 つの変数を設定することでロギング出力の詳細度を調整することもできます。これはリリース時に役立ちます。

于 2012-04-11T23:40:11.527 に答える
1

コマンドの後に「 > outfile.name 」と書くことができます

于 2012-04-11T23:12:30.383 に答える
1

Java プログラミングに関する限り、プログラムのすべての出力を 1 つのファイルに書き込むために、何らかのログ システムを作成する必要があります。整理する場合は複数のファイルに書き込む必要があります。データの特定の部分のみが必要な場合は、この方法を使用することをお勧めします。

Dwrdの答えは正しいです。ただし、出力の特定の部分 (IP アドレスなど) のみが必要な場合、これは探しているコードではありません。プログラムの最初から最後まで、すべての出力が指定したファイルに書き込まれます。当面の主題をより明確にするために、次のコードを使用します。

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 > myLog.txt

これの欠点は、コマンド プロンプト画面に何も出力されないことです。

于 2012-04-11T23:25:04.447 に答える