“JUL 配置文件详解”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
 
(未显示同一用户的2个中间版本)
第52行: 第52行:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 +
日志文件内容由原先的 XML 格式变成了简单的行文本记录格式
  
  
第59行: 第60行:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 +
重复运行多次程序,每一次运行不再覆盖上一次运行记录的日志内容
  
  
 
==== 使用自定义 Logger ====
 
==== 使用自定义 Logger ====
 
<syntaxhighlight lang="properties">
 
<syntaxhighlight lang="properties">
 +
# RootLogger 顶级父元素指定的默认处理器为:ConsoleHandler
 +
handlers= java.util.logging.FileHandler
 +
 +
# RootLogger 顶级父元素指定的默认日志级别为:ALL
 +
.level= ALL
 +
 
# 自定义 Logger 使用
 
# 自定义 Logger 使用
 
io.github.jihch.handlers = java.util.logging.ConsoleHandler
 
io.github.jihch.handlers = java.util.logging.ConsoleHandler
第69行: 第77行:
 
# 关闭默认配置
 
# 关闭默认配置
 
io.github.jihch.useParentHandler = false
 
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
 +
</syntaxhighlight><syntaxhighlight lang="java">
 +
    //加载自定义配置文件
 +
    @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");
 +
    }
 +
</syntaxhighlight>控制台:<syntaxhighlight lang="console">
 +
严重: 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]
 +
</syntaxhighlight>java0.log:<syntaxhighlight lang="console">
 +
严重: 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]
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
因为指定了 io.github.jihch 对应的 Logger 对象使用 ConsoleHandler(<code>io.github.jihch.handlers = java.util.logging.ConsoleHandler</code>),所以控制台中记录了日志内容;
 +
 +
又因为指定了 io.github.jihch 对应的 Logger 对象 logger 不使用父级 Handler(<code>io.github.jihch.useParentHandler = false</code>),所以 logger 记录的内容没有出现在 java0.log 中;
 +
 +
而在配置文件中并没有为 test 对应的 Logger 对象 logger2 指定对应的 Handler,所以默认使用了 RootLogger 的 FileHandler(<code>handlers= java.util.logging.FileHandler</code>),输出到了 java0.log;
 +
 +
同时因为使用了 RootLogger 的日志级别(<code>.level= ALL</code>),logger2 记录在 java0.log 中的内容包含了所有日志级别的记录内容;
 +
 +
又因为指定了 io.github.jihch 对应的 Logger 对象 logger 的日志级别是 CONFIG(<code>io.github.jihch.level = CONFIG</code>),所以控制台中没有记录日志级别比 CONFIG 低的内容;

2023年2月23日 (四) 03:27的最新版本

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 低的内容;