我有以下代码,我们不使用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,这样您也不会发布到该处理程序。

07-25 20:59