我想修改System.out.println();
打印的输出。这怎么可能?
这是可能的 - 我在Bukkit / Craftbukkit中看到过它。如果插件正在使用System.out.println(String string)打印字符串; Bukkit为字符串添加时间/日期和日志状态。
我想像Bukkit一样做。
答案 0 :(得分:13)
您可以更改用作标准输出的PrintStream
:
<强> System.setOut(PrintStream out) 强>
创建您自己的PrintStream
实现,它将您想要的任何额外信息打印到(旧)标准输出,并将其设置为:
System.setOut(myStream);
示例:强>
以下示例在使用PrintStream.println(String x)
方法打印的每个打印String
之前打印当前时间毫秒:
PrintStream myStream = new PrintStream(System.out) {
@Override
public void println(String x) {
super.println(System.currentTimeMillis() + ": " + x);
}
};
System.setOut(myStream);
System.out.println("Hello World!");
输出:
1420553422337: Hello World!
注意:强>
此示例仅覆盖PrintStream.println(String x)
方法,因此调用PrintStream
的其他打印方法不会将时间戳添加到输出中。
答案 1 :(得分:0)
PrintStream print= new PrintStream(System.out) {
@Override
public void println(String yourString) {
super.println(System.currentTimeMillis()+ ": " + yourString);
}
};
print.println("your String");
答案 2 :(得分:0)
这个问题已经回答,但是,我想添加一个很好的方法来跟踪打印。
PrintStream myStream = new PrintStream(System.out) {
@Override
public void println(String line) {
StackTraceElement element = new Exception().getStackTrace()[1];
super.println("("+element.getFileName()+":"+element.getLineNumber()+") "+line);
}
};
System.setOut(myStream);
现在,当您打印某些内容时,它将显示为“(File:linenumber)文本”,在许多编辑器中,您只需单击该内容即可跳到该位置。始终获取stacktrace可能很昂贵,因此最好只在调试期间使用它。