【问题标题】:Hook into System.out.println(); and modify挂钩 System.out.println();并修改
【发布时间】:2015-01-06 14:05:15
【问题描述】:

我想修改System.out.println(); 打印的输出。这怎么可能? 这是可能的——我在 Bukkit/Craftbukkit 中看到过。如果插件使用 System.out.println(String string); 打印字符串; Bukkit 将时间/日期和日志状态添加到字符串中。 我也想和 Bukkit 一样。

【问题讨论】:

  • 您最好设计和实现自己的“打印”类并使用它。
  • 我有自己的记录器类来记录,但我的软件有点像 bukkit。其他用户可以为它开发插件,当插件使用 println() 方法时,它也应该有一个前缀。所以他们可以使用我的记录器,但不必使用它。

标签: java string logging prefix


【解决方案1】:

您可以更改用作标准输出的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 的其他打印方法不会将时间戳添加到输出中。

【讨论】:

    【解决方案2】:
    PrintStream print= new PrintStream(System.out) {
        @Override
        public void println(String yourString) {
            super.println(System.currentTimeMillis()+ ": " + yourString);
        }
    
    };
    
    print.println("your String");
    

    【讨论】:

      【解决方案3】:

      这个问题已经回答了,但是,我想添加一个非常好的方法来跟踪打印。

      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);
      

      现在,当您打印某些内容时,它会显示为“(文件:行号)文本”,在许多编辑器中,您只需单击它即可跳转到该位置。一直获取堆栈跟踪可能非常昂贵,因此最好只在调试期间使用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-26
        • 2015-02-05
        • 1970-01-01
        • 1970-01-01
        • 2013-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多