“JUL 配置文件详解”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) |
Jihongchang(讨论 | 贡献) |
||
(未显示同一用户的1个中间版本) | |||
第65行: | 第65行: | ||
==== 使用自定义 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 | ||
第71行: | 第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"> | </syntaxhighlight><syntaxhighlight lang="java"> | ||
//加载自定义配置文件 | //加载自定义配置文件 | ||
@Test | @Test | ||
− | public void | + | public void testLogProperties() throws IOException { |
// 读取配置文件,通过类加载器 | // 读取配置文件,通过类加载器 | ||
InputStream resourceAsStream = JULTest.class.getClassLoader().getResourceAsStream("logging.properties"); | InputStream resourceAsStream = JULTest.class.getClassLoader().getResourceAsStream("logging.properties"); | ||
第119行: | 第138行: | ||
</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 的日志级别是 | + | 又因为指定了 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 低的内容;