我想用 JUL 记录所有内容,并设置一个 FileHandler 将所有内容写入日志文件,但是,它只记录与 FileHandler 属于同一类的内容。如何在不使用配置文件的情况下将 FileHandler 设置为全局?
最佳答案
您可以遍历 Logger 父级,删除找到的任何其他处理程序并调用 logger.setUserParentHandlers(true) 直到 logger.getParent() 返回 null。这告诉您已经找到了根 Logger 实例,您可以在该实例上调用 logger.addHandler(myOwnHandler)。您可能还想在每个记录器上调用 logger.setLevel(...) 以确保您的处理程序看到所有日志记录 Activity 。这是示例代码:
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();
}
}
关于Java Util Logging 设置 FileHandler 全局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40176561/