log4j| log4j-日志输出级别生效规则(rootLogger , Threshold ,指定包级别 和 指定类级别)

本文详细解析了Log4j中日志级别的配置规则,包括rootLogger、Threshold、指定包级别和指定类级别的日志级别生效机制。通过具体示例,展示了不同配置下日志的输出结果,帮助读者理解如何精确控制日志输出。

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

前言

在使用log4j中,经常需要配置不同的日志Appender的输出级别,比如希望在控制台打印info级别的日志,而在文件中打印error级别的日志等等.本文将细说 rootLogger , Threshold ,指定包级别指定类级别 的情况下日志级别的生效规则.

对于标准日志级别,我们有 ALL < TRACE < DEBUG <INFO <WARN <ERROR <FATAL <OFF的级别顺序.

本文使用的测试类如下:

package com.yveshe;

import org.apache.log4j.Logger;

/**
 * Hello world!
 */
public class Test {
    static Logger log = Logger.getLogger(Test.class.getName());

    public static void main(String[] args) {
        log.trace("This is trace record!");
        log.debug("This is debug record!");
        log.info("This is info record!");
        log.warn("This is warn record!");
        log.error("This is error record!");
        log.fatal("This is fatal record!");
    }
}

情景一:

# Define the root logger with appender file
log4j.rootLogger = DEBUG, STDOUT

# Define the stdout appender
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.conversionPattern=%d %-5p [%t] - %c -%m%n

# 指定Appender的日志等级阈值
log4j.appender.STDOUT.Threshold=warn

测试结果:

2019-10-10 14:05:41,915 WARN  [main] - com.yveshe.Test -This is warn record!
2019-10-10 14:05:41,916 ERROR [main] - com.yveshe.Test -This is error record!
2019-10-10 14:05:41,916 FATAL [main] - com.yveshe.Test -This is fatal record!

# Define the root logger with appender file
log4j.rootLogger = WARN, STDOUT

# Define the stdout appender
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.conversionPattern=%d %-5p [%t] - %c -%m%n

# 指定Appender的日志等级阈值
log4j.appender.STDOUT.Threshold=debug

测试结果:

2019-10-10 14:07:01,434 WARN  [main] - com.yveshe.Test -This is warn record!
2019-10-10 14:07:01,435 ERROR [main] - com.yveshe.Test -This is error record!
2019-10-10 14:07:01,435 FATAL [main] - com.yveshe.Test -This is fatal record!

情景二:

# Define the root logger with appender file
log4j.rootLogger = OFF, STDOUT

# Define the stdout appender
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.conversionPattern=%d %-5p [%t] - %c -%m%n

# 指定Appender的日志等级阈值
log4j.appender.STDOUT.Threshold=warn

# 限制指定包的日志级别
log4j.logger.com.yveshe=error

在没有配置指定包级别限制时,由于rootLogger=OFF,Threshold=warn,最终的结果是不会打印日志,但是由于配置了限制指定包的日志级别,最终会打印该包下的error级别的日志:

2019-10-10 14:09:47,370 ERROR [main] - com.yveshe.Test -This is error record!
2019-10-10 14:09:47,370 FATAL [main] - com.yveshe.Test -This is fatal record!

情景三:

# Define the root logger with appender file
log4j.rootLogger = OFF, STDOUT

# Define the stdout appender
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.conversionPattern=%d %-5p [%t] - %c -%m%n

# 指定Appender的日志等级阈值
log4j.appender.STDOUT.Threshold=warn

# 限制指定包的日志级别
log4j.logger.com.yveshe=error

# 限制指定类的日志级别
log4j.logger.com.yveshe.Test=debug

测试结果:

2019-10-10 14:16:36,940 WARN  [main] - com.yveshe.Test -This is warn record!
2019-10-10 14:16:36,941 ERROR [main] - com.yveshe.Test -This is error record!
2019-10-10 14:16:36,941 FATAL [main] - com.yveshe.Test -This is fatal record!

总结

1.在没有 指定包级别 也么有 指定类级别 的情况:

配置情况一:

# 省略其他设置

log4j.rootLogger = DEBUG, STDOUT
log4j.appender.STDOUT.Threshold=warn

由于debug <warn,所以Threshold阈值设置会生效.

配置情况一:

# 省略其他设置

log4j.rootLogger = OFF, STDOUT
log4j.appender.STDOUT.Threshold=warn

由于warn < OFF,所以Threshold阈值设置会无效
总结起来就是: 当只有 rootLogger 和 Threshold 设置了日志级别时,会将级别高设置生效.

2.在有 指定包级别指定类级别 的情况:

# Define the root logger with appender file
log4j.rootLogger = OFF, STDOUT

# Define the stdout appender
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.conversionPattern=%d %-5p [%t] - %c -%m%n

# 指定Appender的日志等级阈值
log4j.appender.STDOUT.Threshold=warn

# 限制指定包的日志级别 (比如: com.info.*)
log4j.logger.com.yveshe=error

总结:
当存在指定包级别指定类级别时,在指定受影响范围的日志中rootLogger 的设置将失效,最终以指定级别设置的日志级别和Threshold的设置级组合生效选取等级最高的设置生效.

当同时存在在指定包级别指定类级别时,指定类级别的设置会最终生效.

<think>好的,我现在需要帮助用户查找HBase中log4j.properties的配置示例。首先,我得回想一下HBase的日志配置相关知识。HBase作为分布式数据库,日志管理很重要,而log4j是常用的日志框架。用户提到的引用里,有关于log4j.properties的片段,比如引用[2]引用[4],里面提到了log4j的AppenderLayout配置,还有具体的日志输出示例。 用户可能是在配置HBase时遇到了日志问题,或者想自定义日志输出格式级别。我需要先确认HBase默认的log4j配置位置。通常,HBase的配置文件在conf目录下,括hbase-site.xml、hbase-default.xmllog4j.properties。根据引用[1],主要的配置文件是hbase-site.xml,它会覆盖默认配置。但用户现在关注的是log4j.properties,所以需要说明这个文件的位置内容。 接下来,我需要给出一个典型的log4j.properties示例,这可能括控制台文件输出的配置。例如,设置日志级别为INFO,定义不同的Appender,如ConsoleAppenderRollingFileAppender,并指定日志格式。引用[2]中的内容提到PatternLayout,这可以用来定义日志输出的格式,例如含时间戳、日志级别、类名消息。 同时,引用[4]展示了一个日志输出的例子,其中含了时间、日志级别、线程名消息,这可以帮助用户理解如何配置PatternLayout来达到类似的输出效果。另外,用户可能需要知道如何调整HBase的日志级别,比如将org.apache.hadoop.hbase的日志级别调整为DEBUG来获取更详细的信息,这在调试时很有用。 还需要提醒用户,修改配置文件后需要重启HBase服务以使配置生效。此外,HBase的客户端配置可能需要在hbase-site.xml中指定,如引用[3]所述,但log4j.properties通常是服务端的配置。如果用户是在客户端应用中需要配置日志,可能需要将log4j.properties放在客户端的类路径下。 最后,生成相关问题时要涵盖配置方法、调整日志级别日志位置、客户端配置以及性能影响等方面,以帮助用户全面了解相关配置。</think>根据HBase的日志配置实践,典型的$log4j.properties$文件含以下核心配置项。以下示例展示了基本日志输出配置日志级别控制: ```properties # 设置根日志级别为INFO,输出到控制台文件 log4j.rootLogger=INFO, FILE, CONSOLE # 控制台输出配置 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Threshold=INFO log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2}: %m%n # 文件输出配置(滚动日志log4j.appender.FILE=org.apache.log4j.RollingFileAppender log4j.appender.FILE.File=${hbase.log.dir}/hbase.log log4j.appender.FILE.MaxFileSize=256MB log4j.appender.FILE.MaxBackupIndex=10 log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2}: %m%n[^2][^4] # 单独调整HBase区域服务器的日志级别 log4j.logger.org.apache.hadoop.hbase.regionserver=DEBUG ``` **配置说明:** 1. 日志级别通过$Threshold$参数控制,常见级别括$DEBUG$, $INFO$, $WARN$, $ERROR$ 2. $ConversionPattern$定义了日志格式,含时间戳、日志级别、线程名、类名等信息[^4] 3. 滚动日志配置通过$RollingFileAppender$实现,默认保留10个256MB的日志文件 4. 特定组件的日志级别可单独设置(如示例中的RegionServer) **验证配置有效性:** ```shell # 重启HBase后检查日志输出格式 tail -f /var/log/hbase/hbase.log # 应看到类似格式:2023-07-20 14:30:45,123 INFO [regionserver60020] regionserver.HRegion: Opened test_table,,00000000000000 ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值