我有以下代码,我们不使用System.out.println
语句,而必须使用记录器将其打印出来以进行控制台。
这是示例代码(Java):
public void printColumnStats() {
java.util.logging.Logger log = java.util.logging.Logger
.getLogger("ProfileStatusClass");
log.setLevel(Level.ALL);
ConsoleHandler handler = new ConsoleHandler();
handler.setFormatter(new MyFormatter());
handler.setLevel(Level.ALL);
log.addHandler(handler);
// This will print the current Column Profiling stats
log.fine("FieldName : " + this.datasetFieldName);
log.fine("Field index : " + this.fieldIndex);
NumberFormat formatter = new DecimalFormat("#0.00000000");
if (this.fieldType.equalsIgnoreCase("number")) {
log.fine("Field Null Count : " + this.datasetFieldNullCount);
log.fine("Field Valid/Obs Count : " + this.datasetFieldObsCount);
log.fine("Field Min : " + (0l + this.datasetFieldMin));
...
我对此有以下要求(很抱歉,这部分在Scala中,但应该简单明了:
for (e <- tResults) {
e._2.printColumnStats()
println("++........................................................++")
}
即使在循环的每种类型中只有一种类型,在获得下一组统计数据之前,我正在得到大量重复。
Field Null Count : 0.0
Field Null Count : 0.0
Field Null Count : 0.0
Field Null Count : 0.0
Field Null Count : 0.0
Field Null Count : 0.0
Field Null Count : 0.0
Field Null Count : 0.0
Field Null Count : 0.0
Field Null Count : 0.0
Field Null Count : 0.0
Field Null Count : 0.0
Field Null Count : 0.0
Field Null Count : 0.0
Field Null Count : 0.0
最佳答案
您将在每次对'printColumnStats'的调用上添加一个新的ConsoleHandler。您只想安装一个处理程序。如果要使用代码设置记录器,则将设置代码移出printColumnStats函数,并移至静态块中。
private static final Logger log = Logger.getLogger("ProfileStatusClass");
static {
log.setLevel(Level.ALL);
ConsoleHandler handler = new ConsoleHandler();
handler.setFormatter(new MyFormatter());
handler.setLevel(Level.ALL);
log.addHandler(handler);
}
默认情况下,JVM还将在根记录器上安装ConsoleHandler。您的记录器应将UserParentHandlers设置为false,这样您也不会发布到该处理程序。