PrintStreamオブジェクトをコンソールの出力ストリームとエラーストリームに結びつけて、そこに書き込むものがログファイルに書き込まれるようにします。PrintStreamをSystem.outとerrストリームに結び付ける方法
public static void tieOutputStreams(String fileName) {
try {
File output = new File(fileName);
FileWriter writer = new FileWriter(output);
writer.close();
outputStream = new TiedOutputStream(output);
}
catch (Exception e) {
e.printStackTrace();
}
System.setErr(outputStream);
System.setOut(outputStream);
}
私が書いたら、私は物事の様子に戻すことができます。
public static void resetOutputStreams() {
outputStream.close();
System.setErr(System.err);
System.setOut(System.out);
}
TiedOutputStreamクラスのようになります。私は(これらの記述は私のログファイルとシステムコンソールの両方に印刷したい
public static void main(String[] args) {
try {
TieOutputStreams.tieOutputStreams("./sample.log");
System.out.println("Output console");
System.err.println("Error console");
float num = 1.123456f;
System.out.printf("A float: %.6f", num);
} catch (Exception e) {
e.printStackTrace();
}
finally {
TieOutputStreams.resetOutputStreams();
}
}
:
public class TiedOutputStream extends PrintStream {
public TiedOutputStream(File logFile) throws FileNotFoundException {
super(logFile);
}
@Override
public void print(Object obj) {
super.print(obj);
System.out.print(obj);
}
@Override
public PrintStream printf(String format, Object... args) {
super.printf(format, args);
System.out.printf(format, args);
return this;
}
@Override
public void println(Object args) {
super.println(args);
System.out.println(args);
}
}
そして、私の主な方法/エラー)。私が知らない理由のために、これは動作していません。私はすべての答えとコメントに感謝します。前もって感謝します!
私はLog4jがあることを知っています。しかし、私はとにかくこれをやりたい。
これは 'FileOutputStream'と何が関係していますか? – EJP
ありがとう、私は質問を更新しました。 – Raam