首页 > 解决方案 > Java Util Logger 进入和退出方法不处理

问题描述

我尝试使用 java.util.logging.Logger.entring() 和 exiting() 操作,但是,它们似乎没有被处理。我是否需要为 Logger 指定一个处理程序,或者它是否可以在没有类似于 Logger.log() 的情况下工作?在下面的代码中, logger.log() 是打印到控制台的唯一方法,但我没有看到从 logger.entring() 和 logger.exiting() 到控制台的任何消息。任何见解都会很棒。谢谢,

import java.util.logging.Level;
import java.util.logging.Logger;


/**
 *
 * @author hrh74
 */
public class SimpleLogger {
    private static Logger logger =null;
    public SimpleLogger(){
    logger = Logger.getLogger(SimpleLogger.class.getName());
    logger.setLevel(Level.FINER);
    //ConsoleHandler h = new ConsoleHandler();
    //h.setLevel(Level.FINER);
      //      logger.addHandler(h);
     for(Handler handler: logger.getHandlers()){
         handler.setLevel(Level.FINER);
     }
}
    public void simplyLog(){
        logger.entering(getClass().getName(),"In simplyLog");
        logger.log(Level.INFO, "FYI..");
        logger.exiting(getClass().getName(), "Leaving simplyLog");
    }
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        SimpleLogger simple = new SimpleLogger();
        simple.simplyLog();
    }   
}

通过向记录器添加处理程序,进入()和现有()操作正在工作,但是,更新代码的麻烦方面是每个日志记录的双重条目。以下是控制台输出的片段:

Aug 12, 2020 10:51:32 PM org.me.logger.SimpleLogger In simplyLog
FINER: ENTRY
Aug 12, 2020 10:51:32 PM org.me.logger.SimpleLogger simplyLog
INFO: FYI..
Aug 12, 2020 10:51:32 PM org.me.logger.SimpleLogger simplyLog
INFO: FYI..
Aug 12, 2020 10:51:32 PM org.me.logger.SimpleLogger Leaving simplyLog
FINER: RETURN

现在,如果我在构造函数中删除向 Logger 添加 Handler,则 enter() 和 existing() 操作不会出现在日志中,但双日志条目的问题将会消失。这是输出的示例

Aug 13, 2020 9:43:55 AM org.me.logger.SimpleLogger simplyLog
INFO: FYI..

标签: java

解决方案


请参阅这些方法的文档。他们以 FINER 级别登录。

仅当日志条目的级别高于 Logger输出它的处理程序的级别时,才会打印日志条目。在您的情况下,您的记录器正在使用根记录器的默认处理程序,即 ConsoleHandler。

您需要将根记录器的处理程序设置为在所需级别进行记录:

    Logger rootLogger = Logger.getLogger("");
    for (Handler handler: rootLogger.getHandlers()) {
        handler.setLevel(Level.FINER);
    }

推荐阅读