Java Util Logging 设置 FileHandler 全局

标签 java

我想用 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/

相关文章:

java - 绘制多个对象 - Android

java - 如何拦截 spring REST Controller 中的所有请求?

java - 在java中返回自定义数据类型(类?)

java - UDP - 多线程

java - 无法通过java连接oracle 11g

java - 如何在现有的 Web 应用程序中使用 apache spark

java - Infinispan相当于ehcache的copyOnRead和copyOnWrite

Java 类 : Anonymous vs Nested vs Private

java - 程序 'java.ori' 收到 X Window 系统错误

Java 或 Dot Net 用于服务器端 Flash 支持