JUL 配置文件详解

来自姬鸿昌的知识库
跳到导航 跳到搜索

https://www.bilibili.com/video/BV1iJ411H74S?p=9

logging.properties

# RootLogger 顶级父元素指定的默认处理器为:ConsoleHandler
handlers= java.util.logging.FileHandler

# RootLogger 顶级父元素指定的默认日志级别为:ALL
.level= ALL



# 向日志文件输出的 Handler 对象
# 指定日志文件路径 java%u.log
java.util.logging.FileHandler.pattern = java%u.log
# 指定日志文件内容大小为 50000 条
java.util.logging.FileHandler.limit = 50000
# 指定日志文件数量
java.util.logging.FileHandler.count = 1
# 指定 Handler 对象日志消息格式对象
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter




# 向控制台输出的 Handler 对象
# 指定 Handler 对象的日志级别
java.util.logging.ConsoleHandler.level = ALL
# 指定 Handler 对象的日志消息格式对象
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
# 指定 Handler 对象的字符集
java.util.logging.ConsoleHandler.encoding = UTF-8

# 指定日志消息格式
java.util.logging.SimpleFormatter.format = %4$s: %5$s [%1$tc]%n


更换向日志文件输出的 Handler 对象对应的日志消息格式对象

# 指定 Handler 对象日志消息格式对象
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter

java0.log

严重: severe [星期四 二月 23 09:30:36 CST 2023]
警告: warning [星期四 二月 23 09:30:37 CST 2023]
信息: info [星期四 二月 23 09:30:37 CST 2023]
配置: config [星期四 二月 23 09:30:37 CST 2023]
详细: fine [星期四 二月 23 09:30:37 CST 2023]
较详细: finer [星期四 二月 23 09:30:37 CST 2023]
非常详细: finest [星期四 二月 23 09:30:37 CST 2023]

日志文件内容由原先的 XML 格式变成了简单的行文本记录格式


指定以追加方式添加日志内容

java.util.logging.FileHandler.append = true

重复运行多次程序,每一次运行不再覆盖上一次运行记录的日志内容


使用自定义 Logger

# RootLogger 顶级父元素指定的默认处理器为:ConsoleHandler
handlers= java.util.logging.FileHandler

# RootLogger 顶级父元素指定的默认日志级别为:ALL
.level= ALL

# 自定义 Logger 使用
io.github.jihch.handlers = java.util.logging.ConsoleHandler
io.github.jihch.level = CONFIG

# 关闭默认配置
io.github.jihch.useParentHandler = false


# 向日志文件输出的 Handler 对象
# 指定日志文件路径 java%u.log
java.util.logging.FileHandler.pattern = java%u.log
# 指定日志文件内容大小为 50000 条
java.util.logging.FileHandler.limit = 50000
# 指定日志文件数量
java.util.logging.FileHandler.count = 1
# 指定 Handler 对象日志消息格式对象
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
# 指定以追加方式添加日志内容
java.util.logging.FileHandler.append = true
    //加载自定义配置文件
    @Test
    public void testLogProperties() throws IOException {
        // 读取配置文件,通过类加载器
        InputStream resourceAsStream = JULTest.class.getClassLoader().getResourceAsStream("logging.properties");
        // 创建 LogManager
        LogManager logManager = LogManager.getLogManager();
        // 通过 LogManager 加载配置文件
        logManager.readConfiguration(resourceAsStream);

        // 创建日志记录器
        Logger logger = Logger.getLogger("io.github.jihch");

        logger.severe("severe");
        logger.warning("warning");
        logger.info("info");
        logger.config("config");
        logger.fine("fine");
        logger.finer("finer");
        logger.finest("finest");


        Logger logger2 = Logger.getLogger("test");

        logger2.severe("severe test");
        logger2.warning("warning test");
        logger2.info("info test");
        logger2.config("config test");
        logger2.fine("fine test");
        logger2.finer("finer test");
        logger2.finest("finest test");
    }

控制台:

严重: severe [星期四 二月 23 10:31:54 CST 2023]
警告: warning [星期四 二月 23 10:31:54 CST 2023]
信息: info [星期四 二月 23 10:31:54 CST 2023]
配置: config [星期四 二月 23 10:31:54 CST 2023]

java0.log:

严重: severe test [星期四 二月 23 10:31:54 CST 2023]
警告: warning test [星期四 二月 23 10:31:54 CST 2023]
信息: info test [星期四 二月 23 10:31:54 CST 2023]
配置: config test [星期四 二月 23 10:31:54 CST 2023]
详细: fine test [星期四 二月 23 10:31:54 CST 2023]
较详细: finer test [星期四 二月 23 10:31:54 CST 2023]
非常详细: finest test [星期四 二月 23 10:31:54 CST 2023]

因为指定了 io.github.jihch 对应的 Logger 对象使用 ConsoleHandler(io.github.jihch.handlers = java.util.logging.ConsoleHandler),所以控制台中记录了日志内容;

又因为指定了 io.github.jihch 对应的 Logger 对象 logger 不使用父级 Handler(io.github.jihch.useParentHandler = false),所以 logger 记录的内容没有出现在 java0.log 中;

而在配置文件中并没有为 test 对应的 Logger 对象 logger2 指定对应的 Handler,所以默认使用了 RootLogger 的 FileHandler(handlers= java.util.logging.FileHandler),输出到了 java0.log;

同时因为使用了 RootLogger 的日志级别(.level= ALL),logger2 记录在 java0.log 中的内容包含了所有日志级别的记录内容;

又因为指定了 io.github.jihch 对应的 Logger 对象 logger 的日志级别是 CONFIG(io.github.jihch.level = CONFIG),所以控制台中没有记录日志级别比 CONFIG 低的内容;