Настройте log4j для входа в пользовательский файл после запуска веб-приложения - PullRequest
0 голосов
/ 07 мая 2020

Пожалуйста, помогите. У меня есть веб-приложение .war, которое будет работать на Tomcat. Я не знаю, как его имя будет. Я использую ведение журнала log4j, которое задается следующим образом:

log4j.rootLogger = INFO, EK7731API, stdout
# Console print
log4j.logger.deng=INFO
log4j.logger.org.ehcache=DEBUG
log4j.logger.com.mchange.v2.c3p0=INFO
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.ImmediateFlush=true
log4j.appender.stdout.Threshold=debug
log4j.appender.stdout.Append=true
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.conversionPattern=%d - %m%n

# File logger
log4j.logger.EK7731API = INFO, EK7731API
log4j.appender.EK7731API=org.apache.log4j.RollingFileAppender
log4j.appender.EK7731API.File=${catalina.base}/EKlog/EK7731API/EK7731API.out
log4j.appender.EK7731API.ImmediateFlush=true
log4j.appender.EK7731API.MaxFileSize=10MB
log4j.appender.EK7731API.layout=org.apache.log4j.PatternLayout
log4j.appender.EK7731API.layout.conversionPattern=[%p] %d %c %M - %m%n

logger создает файл при запуске

$ {Catalina.base} /EKlog/EK7731API/EK7731API.out

где папка EK7731 Я хочу, чтобы она называлась .war

Если я разверну файл foo.war на сервере, я хочу, чтобы регистратор был установлен на

${Catalina.base}/EKlog/foo/EK7731API.out

если файл - bar.war, то путь будет:

${Catalina.base}/EKlog/bar/EK7731API.out

Как заставить регистратор узнать имя веб-службы и затем соответственно настроить ведение журнала?

public class InitServletListener implements ServletContextListener {
    final static Logger logger = Logger.getLogger("InitServletListener");

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("STOP ..... TOMCAT");
    }

    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        String path = this.getClass().getClassLoader().getResource("").getPath();
        SimpleLayout layout = new SimpleLayout();
        FileAppender appender;
        try {
            appender = new FileAppender(layout, path, false);
            logger.addAppender(appender);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

Спасибо

...