我目前正在开发一个程序,并设置了自定义日志处理程序。 我的日志处理程序如下所示:
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
如何删除此行?
答案 0 :(得分:0)
您在记录器树中安装了多个ConsoleHandler个对象。您需要找到那些额外的处理程序并将其删除。
您有几个选择:
LogManager.reset()
。这将删除记录器树中所有已安装的处理程序。不要创建新的ConsoleHandler,只需更改默认ConsoleHandler的格式即可。例如
for (Handler h : Logger.getLogger("").getHandlers()) {
if(h instanceof ConsoleHandler) {
h.setFormatter(new ProxyLogFormat());
}
}
避免使用代码设置记录树并使用logging.properties file。使用该文件,您可以更改默认格式化程序。
修改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