钩入 System.out.println();并修改
Hook into System.out.println(); and modify
我想修改 System.out.println();
打印的输出。这怎么可能?
有可能 - 我在 Bukkit/Craftbukkit 中看到过。如果插件使用 System.out.println(String string) 打印字符串; Bukkit 将 time/date 和日志状态添加到字符串中。
我也想像Bukkit一样做。
您可以更改用作标准输出的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
的其他打印方法不会将时间戳添加到输出中。
PrintStream print= new PrintStream(System.out) {
@Override
public void println(String yourString) {
super.println(System.currentTimeMillis()+ ": " + yourString);
}
};
print.println("your String");
这个问题已经回答了,但是,我想添加一个很好的跟踪打印的方法。
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) 文本”,在许多编辑器中,您只需单击它即可跳转到该位置。一直获取堆栈跟踪可能非常昂贵,因此最好只在调试期间使用它。
我想修改 System.out.println();
打印的输出。这怎么可能?
有可能 - 我在 Bukkit/Craftbukkit 中看到过。如果插件使用 System.out.println(String string) 打印字符串; Bukkit 将 time/date 和日志状态添加到字符串中。
我也想像Bukkit一样做。
您可以更改用作标准输出的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
的其他打印方法不会将时间戳添加到输出中。
PrintStream print= new PrintStream(System.out) {
@Override
public void println(String yourString) {
super.println(System.currentTimeMillis()+ ": " + yourString);
}
};
print.println("your String");
这个问题已经回答了,但是,我想添加一个很好的跟踪打印的方法。
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) 文本”,在许多编辑器中,您只需单击它即可跳转到该位置。一直获取堆栈跟踪可能非常昂贵,因此最好只在调试期间使用它。