【问题标题】:Spring batch set log4j file appender name from #{jobParameters['']}来自#{jobParameters['']}的Spring批处理设置log4j文件附加程序名称
【发布时间】:2018-04-23 15:02:56
【问题描述】:

我有这个 log4j 属性配置:

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=${logfilepath}
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

我也有这个#{jobParameters['logfilepath']},其中包含我希望 log4j 写入批处理日志的文件路径。

如何将此值传递给log4j.properties 文件?

我想通过命令行参数指定log4j要写入的日志文件的路径。

我该怎么办?

谢谢。

【问题讨论】:

    标签: java spring log4j spring-batch


    【解决方案1】:

    我们可以通过定义一个作业监听器来做到这一点。示例如下。如果您只想使用新的 appender,请确保删除现有的 appender。

    public class CommonLoggerListener implements JobExecutionListener{
    
        @Value("#{jobParameters['LOG_FILE_NAME']}")
        String fileName;
    
        @Override
        public void beforeJob(JobExecution jobExecution) {
           Logger logger = LoggerFactory.getLogger("com.demo");
           Class loggerIntrospected = logger.getClass();
           Field fields[] = loggerIntrospected.getDeclaredFields();
           for (int i = 0; i < fields.length; i++) {
                    String fieldName = fields[i].getName();
                    if (fieldName.equals("logger")) {
                        fields[i].setAccessible(true);
                        org.apache.log4j.Logger loggerImpl = (org.apache.log4j.Logger) fields[i].get(logger);
                        loggerImpl.addAppender(new RollingFileAppender(<layout>, fileName));
                    }
                }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-02-28
      • 1970-01-01
      • 1970-01-01
      • 2013-01-31
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多