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