我想用JUL记录所有内容并设置一个FileHandler来将所有内容写入日志文件,但是,它只记录与FileHandler在同一类中的内容。如何在不使用配置文件的情况下设置FileHandler全局?
答案 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();
}
}