java.util.logging

本文解析了Java中Logger类的工作原理,特别关注了日志级别如何影响日志的输出。通过分析Logger构造函数设置的日志级别默认为INFO,阐述了低于INFO级别的日志信息为何不会被记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

即时设定了LEVER,log的输出也必须是INFO级别以上的,是因为:
在Logger类的构造函数里有下面一句话
levelValue = Level.INFO.intValue();
而当输出log信息时会有一个判断函数。
    public boolean isLoggable(Level level) {
    if (level.intValue() < levelValue || levelValue == offValue) {
        return false;
    }
    return true;
    }
这样只要低于INFO级别的都是不可log的。
<think>好的,我现在需要帮助用户理解他们提供的Java日志配置参数。用户给出的配置是: .level=INFO handlers=java.util.logging.ConsoleHandler java.util.logging.ConsoleHandler.level=FINE 首先,我需要确认用户对Java Util Logging(JUL)的配置是否有基本了解。用户可能是在配置日志时遇到了问题,或者想调整日志级别,但不清楚这些参数的具体作用。他们的需求可能是优化日志输出,控制不同级别的日志信息显示。 接下来,我要拆解每个配置行的含义。第一行`.level=INFO`设置的是根日志记录器的级别为INFO,这意味着只有INFO及以上级别的日志会被记录。需要解释日志级别的层次结构,比如SEVERE、WARNING、INFO、CONFIG、FINE、FINER、FINEST,以及每个级别的用途。 第二行`handlers=java.util.logging.ConsoleHandler`指定了处理程序,这里使用的是控制台处理器,将日志输出到控制台。可能需要提到其他处理器,比如FileHandler,但用户当前配置只用了ConsoleHandler。 第三行`java.util.logging.ConsoleHandler.level=FINE`设置了ConsoleHandler的级别为FINE。这里需要解释处理器的级别和记录器级别的区别。根记录器的级别是INFO,但处理器的级别是FINE,这意味着处理器会处理FINE及以上的日志,但根记录器只允许INFO及以上级别的日志传递到处理器。因此,实际效果可能还是只有INFO及以上级别的日志被输出,因为记录器级别限制了更低级别的日志不被传递。 用户可能存在的困惑是,为什么设置了处理器的级别为FINE,但FINE级别的日志没有出现。这时候需要解释两者的关系,记录器级别优先于处理器级别。要看到FINE级别的日志,需要同时将根记录器的级别设置为FINE或更低。 另外,用户可能需要知道如何正确配置才能显示更详细的日志,比如调试信息。这时候需要给出调整根记录器级别的建议,并可能提供示例配置,说明如何同时调整记录器和处理器的级别。 还需要考虑用户是否了解配置文件的位置和加载方式。默认情况下,JUL会从JRE的lib目录下的logging.properties读取配置,但用户可能需要自定义配置文件,并通过系统属性指定。这时候可能需要指导用户如何指定自定义配置文件,例如使用`-Djava.util.logging.config.file=/path/to/your/logging.properties`。 此外,用户可能对日志级别之间的包含关系不清楚,需要明确说明每个级别的覆盖范围,以及如何组合使用记录器和处理器的级别来控制输出。 最后,可能需要给出一个总结性的配置示例,帮助用户正确配置以实现他们想要的日志输出级别,并提醒常见的配置错误,比如忽略记录器级别导致处理器级别不生效的问题。</think>以下是针对你提供的 `logging.properties` 配置参数的详细解释: --- ### 一、配置内容解析 ```properties .level=INFO handlers=java.util.logging.ConsoleHandler java.util.logging.ConsoleHandler.level=FINE ``` #### 1. `.level=INFO` - **作用**:设置根日志记录器(Root Logger)的默认日志级别为 `INFO`。 - **含义**: 只有 `INFO` 级别及更高级别的日志会被记录(即 `INFO`, `WARNING`, `SEVERE`)。 低于 `INFO` 的日志(如 `FINE`, `FINER`, `FINEST`)会被过滤掉。 #### 2. `handlers=java.util.logging.ConsoleHandler` - **作用**:指定日志处理器(Handler)的类型为控制台输出。 - **含义**: 所有日志会通过 `ConsoleHandler` 输出到控制台(System.out 或 System.err)。 可添加多个处理器(如文件处理器 `FileHandler`),用逗号分隔。 #### 3. `java.util.logging.ConsoleHandler.level=FINE` - **作用**:设置 `ConsoleHandler` 的日志级别为 `FINE`。 - **含义**: 该处理器会处理 `FINE` 级别及更高级别的日志(即 `FINE`, `INFO`, `WARNING`, `SEVERE`)。 但需注意:最终日志是否输出**取决于记录器(Logger)和处理器的双重过滤**(见下文“关键注意事项”)。 --- ### 二、关键注意事项 #### 1. **记录器(Logger)与处理器(Handler)的级别关系** - **记录器级别**(`.level=INFO`):控制哪些日志会被生成。 - 若记录器级别为 `INFO`,则 `FINE` 级别的日志根本不会生成。 - **处理器级别**(`ConsoleHandler.level=FINE`):控制哪些生成的日志会被输出。 - 若处理器级别为 `FINE`,则会输出已生成的 `FINE` 及以上级别日志。 #### 2. **配置矛盾时的实际效果** - 你的配置中: - 记录器级别为 `INFO`(过滤掉 `FINE` 日志) - 处理器级别为 `FINE`(允许输出 `FINE` 日志) - **最终结果**: 由于记录器未生成 `FINE` 日志,处理器虽然允许输出 `FINE`,但实际不会有 `FINE` 日志显示。 --- ### 三、如何输出 `FINE` 级别日志? 若希望输出 `FINE` 级别的日志(如调试信息),需同时调整**记录器级别**和**处理器级别**: ```properties # 记录器级别降低到 FINE .level=FINE # 处理器级别保持 FINE(或更低) handlers=java.util.logging.ConsoleHandler java.util.logging.ConsoleHandler.level=FINE ``` --- ### 四、Java Util Logging 的日志级别对照表 | 级别 | 数值 | 说明 | |-----------|------|-----------------------------------| | SEVERE | 1000 | 严重错误(最高级别) | | WARNING | 900 | 警告 | | INFO | 800 | 常规信息(默认级别) | | CONFIG | 700 | 配置信息 | | FINE | 500 | 一般调试信息 | | FINER | 400 | 更详细的调试信息 | | FINEST | 300 | 最详细的调试信息(最低级别) | --- ### 五、常见问题 #### 1. 为什么配置了 `FINE` 但看不到调试日志? - **原因**:记录器级别(如 `.level=INFO`)高于 `FINE`,导致日志未生成。 - **解决**:将记录器级别设置为 `FINE` 或更低。 #### 2. 如何同时输出到控制台和文件? 添加 `FileHandler` 并配置: ```properties handlers=java.util.logging.ConsoleHandler, java.util.logging.FileHandler java.util.logging.FileHandler.pattern = ./logs/app.log java.util.logging.FileHandler.level = FINE ``` #### 3. 如何自定义日志格式? 通过 `ConsoleHandler.formatter` 指定格式类: ```properties java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter java.util.logging.SimpleFormatter.format = [%1$tF %1$tT] [%4$s] %5$s%6$s%n ``` --- ### 六、总结 - **记录器级别**决定生成哪些日志,**处理器级别**决定输出哪些生成的日志。 - 若需输出低级别日志(如 `FINE`),需确保两者级别均允许。 - 默认配置文件路径为 `JRE_HOME/lib/logging.properties`,可通过启动参数指定自定义配置: ```bash java -Djava.util.logging.config.file=/path/to/your/logging.properties YourApp ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值