package com.revolsys.parallel.tools;
import java.io.File;
import java.io.IOException;
import javax.annotation.PreDestroy;
import org.apache.log4j.Appender;
import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.Layout;
import org.apache.log4j.PatternLayout;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import com.revolsys.logging.Logs;
import com.revolsys.logging.log4j.ThreadLocalFileAppender;
public class ThreadLocalAppenderBean implements BeanFactoryPostProcessor {
private File logFile;
@PreDestroy
public void close() {
ThreadLocalFileAppender.getAppender().setLocalFile(null);
}
public File getLogFile() {
return this.logFile;
}
@Override
public void postProcessBeanFactory(final ConfigurableListableBeanFactory beanFactory)
throws BeansException {
final ThreadLocalFileAppender localAppender = ThreadLocalFileAppender.getAppender();
final String logFilePath = this.logFile.getAbsolutePath();
if (localAppender != null && this.logFile != null) {
final File parentFile = this.logFile.getParentFile();
if (parentFile != null) {
parentFile.mkdirs();
}
localAppender.setLocalFile(logFilePath);
} else if (this.logFile != null) {
final org.apache.log4j.Logger rootLogger = org.apache.log4j.Logger.getRootLogger();
try {
final Layout layout = new PatternLayout("%d\t%p\t%m%n");
final Appender appender = new ThreadLocalFileAppender(layout, logFilePath, false);
appender.setName("ThreadLocalLog");
rootLogger.addAppender(appender);
} catch (final IOException e) {
final Layout layout = new PatternLayout("%p\t%m%n");
final Appender appender = new ConsoleAppender(layout);
rootLogger.addAppender(appender);
Logs.error(this, "Cannot find log file " + this.logFile, e);
}
}
}
public void setLogFile(final File logFile) {
this.logFile = logFile;
}
}