Java Util Logging设置FileHandler全局

时间:2016-10-21 12:21:21

标签: java

我想用JUL记录所有内容并设置一个FileHandler来将所有内容写入日志文件,但是,它只记录与FileHandler在同一类中的内容。如何在不使用配置文件的情况下设置FileHandler全局?

1 个答案:

答案 0 :(得分:1)

您可以遍历Logger父项,删除您查找的任何其他处理程序并调用logger.setUserParentHandlers(true),直到logger.getParent()返回null。这告诉您已经找到了根Logger实例,您可以在其上调用logger.addHandler(myOwnHandler)。您可能还希望在每个记录器上调用logger.setLevel(...)以确保您的处理程序可以看到所有日志记录活动。以下是示例代码:

private static final Logger LOGGER = Logger.getLogger(MyMainClass.class.getName());

static {
    Logger logger = LOGGER.getParent();
    while(logger != null) {
        Handler[] handlers = logger.getHandlers();
        if(handlers != null) {
            for(Handler handler : handlers) {
                logger.removeHandler(handler);
            }
        }

        if(logger.getParent() == null) {
            logger.addHandler(SystemErrHandler.newInstance());
        }
        else {
            logger.setUseParentHandlers(true);
        }

        if(logger.getName().startsWith("my.sample.package")) {
            logger.setLevel(Level.ALL);
        }
        logger = logger.getParent();
    }
}