寻求Groovy配置log4j2 RollingFileAppender的示例
Groovy风格的Log4j2 RollingFileAppender简洁配置方案
以下是针对你的需求优化后的Groovy风格配置,完全摒弃Java样板代码的冗余,利用Groovy特性实现紧凑、易读的日志配置:
import groovy.util.logging.Log4j2 import org.apache.logging.log4j.Level import org.apache.logging.log4j.core.config.Configurator import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilderFactory // 初始化配置构建器,Groovy自动推断类型简化声明 def builder = ConfigurationBuilderFactory.newConfigurationBuilder() // 定义通用日志格式,复用给所有Appender def logLayout = builder.newLayout("PatternLayout") .addAttribute("pattern", "%d [%t] %-5level %logger{36} - %msg%n%throwable") // 配置RollingFileAppender,整合轮转策略 def rollingAppender = builder.newAppender("rollingFile", "RollingFile") .addAttribute("fileName", "myapp.log") // 活跃日志文件名 .addAttribute("filePattern", "myapp-%d{yyyy-MM-dd}-%i.log.gz") // 归档文件格式(按日期+索引+压缩) .add(logLayout) .addComponent(builder.newComponent("Policies") .addComponent(builder.newComponent("SizeBasedTriggeringPolicy").addAttribute("size", "100M")) // 文件达100M触发轮转 .addComponent(builder.newComponent("TimeBasedTriggeringPolicy").addAttribute("interval", 1)) // 每日自动轮转 ) .addComponent(builder.newComponent("DefaultRolloverStrategy").addAttribute("max", 30)) // 最多保留30个归档文件 // 配置控制台Appender def consoleAppender = builder.newAppender("stdout", "Console") .add(logLayout) // 配置根日志级别,关联两个输出目标 builder.newRootLogger(Level.INFO) .add(builder.newAppenderRef("stdout")) .add(builder.newAppenderRef("rollingFile")) // 生效配置 Configurator.initialize(builder.build()) @Log4j2 class MyApp { static void main(String[] args) { log.debug("调试日志内容") log.info("常规业务信息") log.error("错误告警", new Exception("模拟异常栈")) } }
核心优化与功能说明
- Groovy特性简化:利用链式调用、类型推断、省略冗余语法,将Java版的几十行配置压缩为紧凑的逻辑块,可读性更强。
- 多策略轮转:同时支持按文件大小(100M)和时间(每日)触发轮转,满足复杂场景需求。
- 归档管理:通过
DefaultRolloverStrategy限制归档文件数量,避免磁盘空间被无限占用。 - 格式统一:复用同一日志格式配置,确保控制台和文件日志输出风格一致。
执行方式
保持你原有的环境配置,直接运行脚本即可:
$ export CLASSPATH=$LIBS/log4j-api-2.20.0.jar:$LIBS/log4j-core-2.20.0.jar $ groovy my-example.groovy
内容的提问来源于stack exchange,提问作者H. Dog
相关产品推荐
相关产品推荐

