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

时间:2018-05-12 02:45:51

标签: java logging java.util.logging

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

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

(log是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 如何删除此行?

1 个答案:

答案 0 :(得分:0)

您在记录器树中安装了多个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的默认格式模式。这可以使用logging.properties or as a system property中的java.util.logging.SimpleFormatter.format键指定。您的模式为%1$tH:%1$tM:%1$tS.%1$tL - [%3$s] -[%4$s] %5$s%n