“JUL”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
 
(未显示同一用户的5个中间版本)
第7行: 第7行:
 
[[JUL Logger 对象父子关系]]
 
[[JUL Logger 对象父子关系]]
  
=== JUL 配置文件入门 ===
+
[[JUL 配置文件入门]]
https://www.bilibili.com/video/BV1iJ411H74S?p=8
 
  
默认配置文件调用
+
[[JUL 配置文件详解]]
  
Logger.getLogger(String name) ->
+
[[JUL 执行原理和流程]]
  
Logger.demandLogger(String name, String resourceBundleName, Class<?> caller) ->
+
https://github.com/jihch/jul-demo
 
 
LogManager.getLogManager() ->
 
 
 
manager.ensureLogManagerInitialized() ->
 
 
 
owner.readPrimordialConfiguration()->
 
 
 
readConfiguration()->
 
 
 
f = new File(f, "logging.properties")
 
 
 
I:\Java\jdk1.8.0_101\jre\lib\logging.properties
 
 
 
 
 
 
 
 
 
 
 
==== 加载自定义配置文件 ====
 
logging.properties<syntaxhighlight lang="properties">
 
handlers= java.util.logging.ConsoleHandler
 
 
 
 
 
.level= ALL
 
 
 
 
 
 
 
# default file output is in user's home directory.
 
java.util.logging.FileHandler.pattern = %h/java%u.log
 
java.util.logging.FileHandler.limit = 50000
 
java.util.logging.FileHandler.count = 1
 
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
 
 
 
# Limit the message that are printed on the console to INFO and above.
 
java.util.logging.ConsoleHandler.level = ALL
 
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
 
</syntaxhighlight>JULTest.java<syntaxhighlight lang="java">
 
    //加载自定义配置文件
 
    @Test
 
    public void test01() 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");
 
    }
 
</syntaxhighlight><syntaxhighlight lang="console">
 
二月 23, 2023 8:58:36 上午 io.github.jihch.JULTest test01
 
严重: severe
 
二月 23, 2023 8:58:36 上午 io.github.jihch.JULTest test01
 
警告: warning
 
二月 23, 2023 8:58:36 上午 io.github.jihch.JULTest test01
 
信息: info
 
二月 23, 2023 8:58:36 上午 io.github.jihch.JULTest test01
 
配置: config
 
二月 23, 2023 8:58:36 上午 io.github.jihch.JULTest test01
 
详细: fine
 
二月 23, 2023 8:58:36 上午 io.github.jihch.JULTest test01
 
较详细: finer
 
二月 23, 2023 8:58:36 上午 io.github.jihch.JULTest test01
 
非常详细: finest
 
</syntaxhighlight>
 
 
 
 
 
 
 
 
 
==== 添加 Handler ====
 
logging.properties<syntaxhighlight lang="properties">
 
handlers= java.util.logging.ConsoleHandler,java.util.logging.FileHandler
 
 
 
 
 
.level= ALL
 
 
 
 
 
 
 
# default file output is in user's home directory.
 
java.util.logging.FileHandler.pattern = java%u.log
 
java.util.logging.FileHandler.limit = 50000
 
java.util.logging.FileHandler.count = 1
 
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
 
 
 
# Limit the message that are printed on the console to INFO and above.
 
java.util.logging.ConsoleHandler.level = ALL
 
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
 
</syntaxhighlight>这样将在项目根目录下增加日志文件的输出
 
 
 
关键点是在 handlers 后面追加了下面的 FileHandler
 
 
 
 
 
 
 
 
 
 
 
=== JUL 配置文件详解 ===
 
https://www.bilibili.com/video/BV1iJ411H74S?p=9
 
 
 
==== logging.properties ====
 
<syntaxhighlight lang="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
 
</syntaxhighlight>
 
 
 
 
 
 
 
 
 
==== 更换向日志文件输出的 Handler 对象对应的日志消息格式对象 ====
 
<syntaxhighlight lang="properties">
 
# 指定 Handler 对象日志消息格式对象
 
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
 
</syntaxhighlight>java0.log<syntaxhighlight lang="console">
 
严重: 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]
 
</syntaxhighlight>
 
 
 
 
 
 
 
 
 
 
 
==== 指定以追加方式添加日志内容 ====
 
<syntaxhighlight lang="properties">
 
java.util.logging.FileHandler.append = true
 
</syntaxhighlight>
 
 
 
 
 
 
 
 
 
==== 使用自定义 Logger ====
 
 
 
===== logging.properties =====
 
<syntaxhighlight lang="properties">
 
# 自定义 Logger 使用
 
io.github.jihch.handlers = java.util.logging.ConsoleHandler
 
io.github.jihch.level = CONFIG
 
 
 
# 关闭默认配置
 
io.github.jihch.useParentHandler = false
 
</syntaxhighlight>
 

2023年2月23日 (四) 09:36的最新版本