将跳过的项目记录到同一春季批处理作业中的另一个文件中



我有一个spring-batch程序,我在其中实现了skiplistener类,如下所示:

public class MySkipListener implements SkipListener<SomeBean, SomeBean> {

public void onSkipInProcess(final SomeBean item, final Throwable t) {
    // TODO Auto-generated method stub
    System.out.println("Skipped details during PROCESS is: " + t.getMessage());
    LogFactory.getLog("INFO" + MySkipListener.class.getName()).info(
        "Skipped details during PROCESS is: " + t.getMessage());    
}
public void onSkipInRead(final Throwable t) {
    System.out.println("Skipped details during READ is: " + t.getMessage());
    LogFactory.getLog("INFO" + MySkipListener.class.getName()).info(
        "Skipped details during READ is: " + t.getMessage());

}

public void onSkipInWrite(final SomeBean item, final Throwable t) {
    // TODO Auto-generated method stub
    System.out.println("Skipped details during WRITE is: " + t.getMessage());
    LogFactory.getLog("INFO" + MySkipListener.class.getName()).info(
        "Skipped details during WRITE is: " + t.getMessage());
}
}

log4j配置为:

log4j.rootLogger=myLOG
log4j.appender.myLOG=org.apache.log4j.RollingFileAppender
log4j.appender.myLOG.File=myLog.log
log4j.appender.myLOG.MaxFileSize=100KB
# Keep one backup file
log4j.appender.myLOG.MaxBackupIndex=1
log4j.appender.myLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.myLOG.layout.ConversionPattern=%d{dd/MM/yyyy HH:mm:ss.SSS} [%t] [%c{1}] %-5p %x - %m%n

很明显,所有日志记录语句都会进入myLog.log,包括上面跳过侦听器类方法的语句。

但是,我不希望跳过的项目日志进入主日志文件。我希望它们转到一个单独的文件(例如skippedItems.log),这样我就不需要在主日志中搜索跳过的项目行,而是直接在一个单独文件中获取所有跳过的项目。

为了实现这一点,我需要做哪些改变?

下面的尝试不起作用,myLOGTwo是我的配置中的一个新追加程序,它没有添加到rootLogger中。因此,每当我想通过该appender进行写入时,我都想动态地将其添加和删除到rootLogger中。

Logger l = Logger.getRootLogger();
Appender a = l.getAppender("myLOGTwo");
l.addAppender(a);
LogFactory.getLog("INFO" + MySkipListener.class.getName()).info("Testing");
l.removeAppender(a);

请参阅Michael在上述问题中的评论。。。

最新更新