log4j настройка имени файла журнала @ runtime не работает - PullRequest
2 голосов
/ 28 февраля 2012

В приложении есть требование, чтобы созданный файл журнала имел другое имя при каждом запуске (в зависимости от функциональности + текущего потока).Я видел вопросы, уже опубликованные в SO, и пытался использовать тот же метод, но он не работает.

Все операторы журнала регистрируются в "xyz.log" (указанном в log4j.properties),Только "org.apache.log4j.PatternLayout" регистрируется в abc.log (указанном в программе).Любые указатели для решения этой проблемы будут очень полезны.

log4j.properties

log4j.rootLogger=DEBUG, MyLogger

log4j.appender.MyLogger=org.apache.log4j.FileAppender
log4j.appender.MyLogger.layout=org.apache.log4j.PatternLayout

log4j.appender.MyLogger = org.apache.log4j.DailyRollingFileAppender
log4j.additivity = false
log4j.appender.MyLogger.File=xyz.log
log4j.appender.MyLogger.MaxFileSize = 5MB
log4j.appender.MyLogger.MaxBackupIndex = 20
# Pattern to output the caller's file name and line number.
log4j.appender.MyLogger.layout.ConversionPattern=%d %5p [%t](%c:%L) - %m%n

Java-код

    logger = Logger.getLogger(MyLoggerUtil.class);
    Layout layout = new PatternLayout("org.apache.log4j.PatternLayout");
    logger.removeAllAppenders();
    FileAppender appender = null;
    try {
        appender = new FileAppender(layout, "abc.log", false);
    } catch (IOException e) {
        e.printStackTrace();
    }
    logger.addAppender(appender);
    logger.setLevel((Level) Level.DEBUG);
    logger.debug("This is a debug test");

1 Ответ

1 голос
/ 28 февраля 2012

Конструктор PatternLayout ожидает шаблон преобразования, подобный используемому в lo4j.properties. Так что измените создание Layout на:

Layout layout = new PatternLayout("%d %5p [%t](%c:%L) - %m%n");

Шаблон взят из вашего log4j.properties

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...