2016-08-19 6 views
1

У меня есть приложение, которое работает каждые 15 минут, 23 часа в сутки. Большую часть времени он «просыпается», видит, что нет данных для обработки и закрытия. Во время проверки инициализации и ввода данных есть записи журнала DEBUG, которые записываются только на консоль. Только после того, как приложение обнаружило данные для обработки, оно записывает что-либо в файл журнала (уровень INFO и выше). Проблема заключается в том, что пробелы «нет данных для обработки» создают пустые файлы журналов, хотя ничто не записывается в них. Поскольку это происходит почти 100 раз в день, это поведение нежелательно.Log4j создает пустой файл до его необходимости

Я могу легко реализовать метод для ручного удаления этих файлов, если они не нужны, но это кажется ... взломанным. Есть ли способ заставить Log4j ждать при создании файла журнала, пока на нем не будет написано что-то? Благодаря!

Соответствующая часть log4j.properties:

log4j.appender.myFileLogger=org.apache.log4j.RollingFileAppender 
log4j.appender.myFileLogger.Append=false 
log4j.appender.myFileLogger.File=D:/Imaging/myApp/logs/myApp_${current.date}.log 
log4j.appender.myFileLogger.threshold=INFO 
log4j.appender.myFileLogger.layout=org.apache.log4j.PatternLayout 
log4j.appender.myFileLogger.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 
+0

Вы можете удалить HH: мм: сс часть из вашего файла и иметь ежедневный журнал? Я думаю, что может быть полезно знать, что ничего не обработано, и, возможно, это явная регистрация. Увы, извините, у меня нет ответа на ваш вопрос. Это интересно. – dckuehn

+0

Роллинг ежедневных журналов был оригинальным решением, и я вполне могу вернуться к этому. Его странная настройка, когда входные данные доставляются всякий раз, когда это удобно, поэтому несколько входных файлов могут быть доставлены сразу и обрабатываться последовательно. Надежда состояла в том, чтобы получить один файл журнала для каждого файла обработки/ввода, но его незначительная проблема в любом направлении. В основном любопытство на данный момент :) – jfaulk919

ответ

0

Если кто-то когда-либо приходит через это, вот как я «решил» это:

if(deleteLog) { 
    FileAppender appender = (FileAppender)Logger.getRootLogger().getAppender("myFileLogger"); 
    String path = appender.getFile(); 
    Logger.shutdown(); 
    Files.delete(Paths.get(path)); 
} 

Это все еще чувствует себя немного хака, но работает без необходимости дополнительных конфигурационных точек или жестко закодированных путей к файлам. Не забудьте вызвать logger.shutdown(), иначе Log4j все равно будет иметь открытый дескриптор файла, выбросив ошибку «другой процесс с использованием этого файла». Ответ

Basil Мусы послужили основой для этого: https://stackoverflow.com/a/9480213/5780475