2016-06-10 6 views
3

Сейчас я вращающиеся журналы с помощью log4j2, если она достигает 2000 Мб и времени на основе т.е. каждый час с следующей логикой: -Как вращать журналы на каждом выключении сервера в log4j2

<RollingRandomAccessFile name="test" 
      fileName="${sys:log4j.logPath}/testlog" filePattern="${sys:log4j.logPath}/test-%d{yyyy-MM-dd-HH}-%i.log.gz"> 
      <PatternLayout> 
       <Pattern>%d{ISO8601} %m%n</Pattern> 
      </PatternLayout> 
      <Policies> 
       <SizeBasedTriggeringPolicy size="1990 MB" /> 
       <TimeBasedTriggeringPolicy /> 
      </Policies> 
     </RollingRandomAccessFile> 

Я также хочу, чтобы повернуть журналы при выключение сервера. какую конфигурацию я должен добавить к следующему?

Я использовал OnStartupTriggeringPolicy для поворота журналов при выключении. Но журналы меняют после того, как сделали один запрос с перезагрузкой сервера.

Но я хочу, чтобы мои журналы вращаются при завершении работы сервера. Есть ли способ сделать это?

+0

, возможно, смотрите здесь: [http://stackoverflow.com/questions/1444520/is-it-possible-to-configure-log4j-to-create-a-new-file-with-every-run- (хотя я не совсем понимаю, чего вы хотите) –

ответ

1

Я нашел решение для вышеуказанной проблемы. Следующий код работает для меня.

Add 'shutdownHook = "выключить"' в log4j.xml

<Configuration status="WARN" shutdownHook="disable"> 

Метод опрокидывании(): -

public class RollOverLog4j { 

    public static void rollover() { 
     public final Logger logger = LogManager.getLogger("test"); 

     Map<String, Appender> appenders = ((org.apache.logging.log4j.core.Logger) logger).getAppenders(); 
     Iterator<Entry<String, Appender>> appenderIterator = appenders.entrySet().iterator(); 
     while (appenderIterator.hasNext()) { 
      Appender appender = appenderIterator.next().getValue(); 
      if (appender instanceof RollingRandomAccessFileAppender) { 
       ((RollingRandomAccessFileAppender) appender).getManager().rollover(); 
      } 
     } 
    } 

} 

вызова при переворачивании() на сервере остановки: -

RollOverLog4j.rollover() 
// shutting down log4j manually 
Configurator.shutdown((LoggerContext) LogManager.getContext()); 

Примечание: - rollover() не является общедоступным методом в log4 версии 2.3. Поэтому используйте последнюю версию 2.6, чтобы она работала.

+0

Это очень хорошее решение для вашей проблемы! – rgoers

0

Название вашего вопроса - поворот журналов при перезапуске сервера, но ваш вопрос состоит в том, чтобы повернуть журналы при завершении работы. Поворот журнала при выключении ненадежен, потому что файл не будет вращаться, если сервер или система выйдет из строя. Функция может быть реализована для рутинга при нормальном завершении работы, но для этого вам нужно будет создать Jira для Log4j.

Log4j 2 поддерживает OnStartupTriggeringPolicy. Это приведет к тому, что файл начнет опрокидываться при запуске сервера, если файл не пуст.

+0

Я обновил свой заголовок. Я также попробовал OnStartupTriggeringPolicy. Его запуск и запись записываются при первом запросе после перезапуска сервера. Но мне нужно повернуть log on shutdown, как, например, блок в java. – karan

+0

Пожалуйста, создайте вопрос Jira, чтобы запросить это. – rgoers

+0

Я создал проблему Jira здесь https://issues.apache.org/jira/browse/LOG4J2-1426 – karan