从Log4j 1.2迁移至2.22.0:Log4j.properties转Log4j2.properties求助
Log4j 1.2 转 Log4j 2.22.0 properties配置转换方案
转换后的完整log4j2.properties配置
# Log4j2内部调试开关,对应原log4j.debug status = ${log4j.isdebug} # 根日志配置,对应原log4j.rootCategory rootLogger.level = ${log4j.default.level} rootLogger.appenderRefs = console, file rootLogger.appenderRef.console.ref = CONSOLE rootLogger.appenderRef.file.ref = ROLLING_FILE # fr.bowling包日志级别配置,对应原log4j.category.fr.bowling logger.bowl.name = fr.bowling logger.bowl.level = ${log4j2.mybowl.level} logger.bowl.additivity = false logger.bowl.appenderRefs = console, file logger.bowl.appenderRef.console.ref = CONSOLE logger.bowl.appenderRef.file.ref = ROLLING_FILE # 屏蔽org.apache.catalina日志,对应原log4j.category.org.apache.catalina=FATAL logger.tomcat.name = org.apache.catalina logger.tomcat.level = FATAL logger.tomcat.additivity = false # 控制台输出Appender,对应原log4j.appender.CONSOLE appender.CONSOLE.type = Console appender.CONSOLE.name = CONSOLE appender.CONSOLE.layout.type = PatternLayout appender.CONSOLE.layout.pattern = %-4r [%t] %-5p %c %x - %m%n # 滚动文件输出Appender,对应原log4j.appender.R appender.ROLLING_FILE.type = RollingFile appender.ROLLING_FILE.name = ROLLING_FILE appender.ROLLING_FILE.fileName = ${log4j2.path}/mybowl_main.log appender.ROLLING_FILE.filePattern = ${log4j2.path}/mybowl_main-%d{yyyy-MM-dd}-%i.log.gz # 文件大小滚动策略 appender.ROLLING_FILE.policies.type = Policies appender.ROLLING_FILE.policies.size.type = SizeBasedTriggeringPolicy appender.ROLLING_FILE.policies.size.size = 10MB # 备份文件保留策略 appender.ROLLING_FILE.strategy.type = DefaultRolloverStrategy appender.ROLLING_FILE.strategy.max = 3 # 日志格式配置 appender.ROLLING_FILE.layout.type = PatternLayout appender.ROLLING_FILE.layout.pattern = %-5p %d [%t] %X{UserSessionId} %c{1} %30m%n
核心转换思路解析
1. 基础配置映射
- 原
log4j.debug对应Log4j2的status参数,用于控制Log4j自身的调试日志输出 - 原
log4j.rootCategory拆分为rootLogger.level(设置根日志级别)和rootLogger.appenderRefs(关联要使用的Appender),每个Appender通过appenderRef.xxx.ref绑定具体的Appender名称
2. 特定包日志规则
- 原
log4j.category.xxx格式替换为Log4j2的logger.xxx.name(指定目标包名)+logger.xxx.level(设置日志级别)结构,添加additivity = false避免日志重复输出到根Logger的Appender中
3. Appender结构重构
- 控制台Appender:原
org.apache.log4j.ConsoleAppender替换为Log4j2的Console类型Appender,通过type直接声明组件类型,结构更清晰 - 滚动文件Appender:原
org.apache.log4j.RollingFileAppender替换为RollingFile类型,将原有的滚动规则拆分为Policies(触发滚动的条件,这里是文件大小)和DefaultRolloverStrategy(备份文件保留策略),原MaxFileSize对应SizeBasedTriggeringPolicy.size,原MaxBackupIndex对应DefaultRolloverStrategy.max
4. 日志格式兼容
- 原
PatternLayout的ConversionPattern直接对应Log4j2的layout.pattern,原配置中的%X{UserSessionId}、%c{1}等格式占位符完全兼容,无需修改
5. 环境变量适配
- 结合项目
development.properties中的变量,将原配置里的${log4j.mybowl.level}替换为${log4j2.mybowl.level},${log4j.path}替换为${log4j2.path},保证变量能正确读取
关键注意事项
- 需移除项目中所有Log4j 1.x依赖,引入Log4j 2.x核心依赖:
log4j-core和log4j-api - 若项目代码中直接使用Log4j1的API(如
org.apache.log4j.Logger),可选择替换为Log4j2 API(org.apache.logging.log4j.Logger),或引入log4j-1.2-api桥接包临时兼容(推荐直接迁移API以获得更好性能与功能支持) - Log4j2的properties配置采用层级式语法,每个组件必须通过
type指定类型、name指定唯一标识,这是与Log4j1配置最核心的差异
内容的提问来源于stack exchange,提问作者hayou
相关产品推荐
相关产品推荐

