删除部分自定义日志处理程序

Remove part of custom log handler

我目前正在开发一个程序,我设置了自定义日志处理程序。 我的日志处理程序如下所示:

public class ProxyLogFormat extends Formatter {

    // Create a DateFormat to format the logger timestamp.
    private static final DateFormat df = new SimpleDateFormat("hh:mm:ss.SSS");

    public String format(LogRecord record) {
        StringBuilder builder = new StringBuilder(1000);
        builder.append(df.format(new Date(record.getMillis()))).append(" - ");
        builder.append("[").append(record.getLoggerName()).append("] -");
        builder.append("[").append(record.getLevel()).append("] - ");
        builder.append(formatMessage(record));
        builder.append("\n");
        return builder.toString();
    }

    public String getHead(Handler h) {
        return super.getHead(h);
    }

    public String getTail(Handler h) {
        return super.getTail(h);
    }
}

我这样注册日志处理程序:

   Handler CH = new ConsoleHandler();
    CH.setFormatter(new ProxyLogFormat());
    log.addHandler(CH);

(日志是一个 Logger 对象) 然而,经过我所有的尝试,日志看起来像这样:

10:31:21.249 - [MAIN] -[INFO] - Starting proxy...
May 11, 2018 10:31:21 PM pw.mmvyoutube.proxycrack.Main main
INFO: Starting proxy...
10:31:21.265 - [MAIN] -[INFO] - Host: 0.0.0.0
May 11, 2018 10:31:21 PM pw.mmvyoutube.proxycrack.Main main
INFO: Host: 0.0.0.0
10:31:21.266 - [MAIN] -[INFO] - Remote Port: 111
May 11, 2018 10:31:21 PM pw.mmvyoutube.proxycrack.Main main
INFO: Remote Port: 111
10:31:21.268 - [MAIN] -[INFO] - Local Port: 100
May 11, 2018 10:31:21 PM pw.mmvyoutube.proxycrack.Main main
INFO: Local Port: 100

如您所见,有些消息会重复出现,但仍然有烦人的 May 11, 2018 10:31:21 PM pw.mmvyoutube.proxycrack.Main main 我怎样才能删除这条线?

您在记录器树中安装了多个 ConsoleHandler 对象。您需要找到那些额外的处理程序并将其删除。

您有几个选择:

  1. 您可以在安装控制台处理程序之前调用 LogManager.reset()。这将删除记录器树中所有已安装的处理程序。
  2. 不要创建新的 ConsoleHandler,只需更改默认 ConsoleHandler 的格式即可。例如

    for (Handler h : Logger.getLogger("").getHandlers()) { if(h instanceof ConsoleHandler) { h.setFormatter(new ProxyLogFormat()); } }

  3. 避免使用代码来设置记录器树并使用 logging.properties file。使用该文件,您可以更改默认格式化程序。

  4. 编辑 SimpleFormatter. This can be specified using the java.util.logging.SimpleFormatter.format key in the logging.properties or as a system property 的默认格式模式。你的模式是 %1$tH:%1$tM:%1$tS.%1$tL - [%3$s] -[%4$s] %5$s%n