我有一个大型程序,我在其中使用System.out进行调试。但我希望能够将所有System.out同时记录到一个文件中,所以即使我的程序没有在控制台中运行,所有System.out都会写入文件,我将能够看到它程序运行或以后的任何时刻。
顺便说一句,抓取所有程序并使用记录器而不是System.out语句是不明智的!
我尝试java -jar myjar.jar > sysout.txt
但它没有记录java logger实用程序记录的异常。
答案 0 :(得分:5)
System.setOut(PrintStream)
怎么样?您可以在程序的初始化部分插入此调用(启动)。
以前是一个提交:
当然,您可以使用System.err执行相同操作 - 即System.setErr(PrintStream),但最好使用不同的文件流。
详细假设自动刷新追加和缓冲的文件流:
String file = ...;
PrintStream ps =
new PrintStream(true, new BufferedOutputStream(new FileOutputStream(file, true)));
System.setOut(ps);
答案 1 :(得分:4)
正常重定向command_name args > output
仅重定向标准输出。它不会重定向标准错误流,通常会记录错误。要将两个流输出到同一个文件,请使用
command args &> filename
例如。 java -jar myjar.jar &> sysout.txt
要重定向到不同的文件,请使用
command args 1> output_file 2> error_file
例如。 java -jar myjar.jar 1> sysout.txt 2> errout.txt