You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Log4j v1 properties配置中logger名称如何定义

配置行分类说明

提供的所有配置行均为非Root自定义logger的配置项,未包含appender绑定、日志格式、日志器继承开关(additivity)等其他类型的配置。
每一行的结构统一为log4j.logger.<logger名称段>=<日志级别>:

  • 等号左侧,固定前缀log4j.logger.之后的字符串部分,作用是定义logger的唯一名称
  • 等号右侧的日志级别(ERROR/DEBUG/INFO/WARN等)是该logger的级别属性配置,不属于名称定义范畴
各配置项对应的logger名称列表

所有配置行提取出的logger名称及对应配置级别如下:

  • org.apache.axis.utils:ERROR
  • strike:DEBUG
  • strike.textfiles:DEBUG
  • org.krake.strike.trace:INFO
  • org.medusa.orm.armadillo.Loader:DEBUG
  • org.medusa.orm.armadillo.functions.ProcessBulkErrors:WARN
  • org.medusa.orm.engine.Armadillo:INFO
  • org.medusa.orm.armadillo.lib:INFO
  • org.medusa.orm.armadillo.ORM2ExecutionContext:DEBUG
  • org.medusa.orm.armadillo.lib.GetFieldValue:DEBUG
  • org.medusa.orm.toolkit.ORMt2ORMx:DEBUG
  • org.krake.box.abstraction.slidr.service.job.manager.Cpu:DEBUG
  • org.krake.box.abstraction.slidr.service.job.manager.Block:DEBUG
  • org.krake.box.abstraction.slidr.service.job.manager.SimpleCloudWorkerManager:INFO
  • org.krake.box.abstraction.impl.scheduler.common.AbstractExecutor:DEBUG
  • org.krake.box.abstraction.impl.scheduler.pbs.PBSExecutor:DEBUG
  • org.krake.box.armadillo.workflow.events.WorkerSweeper:WARN
  • org.krake.box.armadillo.workflow.nodes.FlowNode:WARN
  • org.krake.box.armadillo.scheduler.WeightedHostScoreScheduler:INFO
  • org.krake.box.abstraction.impl.common.task.TaskImpl:INFO
  • org.krake.box.abstraction.slidr.rlog:INFO
  • com.senatus.impl.execution.ec2:DEBUG
  • com.endeca:INFO
  • com.endeca.itl.web.metrics:INFO
Log4j v1 properties格式的logger名称解析规则

所谓“隐式定义”是误解,Log4j v1对properties配置中logger名称的解析是硬编码的固定逻辑,没有模糊推断规则,具体算法如下:

  1. 配置加载时逐行读取键值对,先匹配键的前缀:
    • 若键完全等于log4j.rootLogger,判定为根日志器配置,无自定义名称
    • 若键以log4j.logger.为固定前缀,判定为非Root自定义logger配置
  2. 提取自定义logger名称时,直接将键中log4j.logger.前缀之后的所有完整字符串原样截取,不做任何截断、转义、层级拆分,截取结果就是该logger的唯一匹配名称。
  3. 配置中大量和Java包名、全限定类名一致的logger名称,不是Log4j做了自动类扫描绑定,是业务代码调用日志API时,通常会传入当前类的Class对象作为参数,日志框架内部会自动取该类的全限定名作为logger名称,和配置里截取到的名称做精确字符串匹配——名称中的.只是普通字符,没有语法含义,哪怕logger名称不带.(比如示例里的strike),只要代码中获取logger时传入的名称和配置截取结果完全一致,就能正常生效。
  4. 非Root类型的logger确实必须配置名称,Log4j v1不会自动生成未显式声明名称的自定义logger,名称匹配是纯字符串精确匹配逻辑,不存在未公开的特殊隐式规则。早期官方文档只给出了配置示例,没有单独拆解这段解析逻辑,才会造成“规则隐式”的误解。

内容的提问来源于stack exchange,提问作者Borea Deitz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 23:27:35