有什么方法可以保存文件中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
它会在命令提示符上打印很多内容,并且我希望将所有在控制台上打印的内容存储到文件中。
答案 0 :(得分:1)
您可以在命令
后面写“> outfile.name”答案 1 :(得分:1)
就Java编程而言,您必须制作某种日志记录系统,以便将所有程序的输出写入文件,或者如果您正在寻找组织,则必须编写多个文件。如果您只需要某些部分数据,我建议使用此方法。
Dwrd's answer是正确的。但是,如果您只需要输出的某些部分(例如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
这样做的缺点是命令提示屏幕没有输出。
答案 2 :(得分:1)
您可以直接在程序中或控制台上捕获输出。
如果你想获得绝对所有东西(STDOUT和STDERR),你需要重定向STDOUT(来自System.out)和STDERR(来自System.err)。您可以将两者重定向到同一文件(将> log.txt 2>&1
添加到控制台命令的末尾),也可以将它们记录到不同的文件中(将> BatchMain.log 2> BatchMain.err
添加到控制台的末尾)。
记录到单个文件log.txt:
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都记录到同一个文件中,你最终会得到两个PrintStream交织在一起的无意义输出,或者STDOUT中的某些内容可能比相关文件打印得晚得多打印到STDERR的消息。一种解决方法是根据需要调用System.out.flush()
,但如果您将大量文本记录到System.out
,这可能会降低性能。
我不建议使用System.out.println()
将所有内容打印到控制台并尝试捕获该输出,而是建议使用Java Logging或Log4J,或者更进一步使用{{3}可以配置为在内部使用前两个系统中的任何一个。真正令人敬畏的部分是你不必判断哪个类打印了每条日志消息,因为你会自动获得它。
如果您使用日志记录框架,您还可以通过设置单个变量来调整日志记录输出的详细程度 - 这将在发布时派上用场。