Планировщик автоматического пролонгации Log4j2 - PullRequest
0 голосов
/ 09 января 2019

Как настроить log4j2 для опрокидывания каждые 30 секунд?

Например, если сегодня 2019-01-09 09:45:00 и я записываю данные в файл журнала командой

log.info("test")

в течение 10 минут не поступает никаких данных, но мне нужен файл журнала автообновления через 30 секунд в 2019-01-09 09: 45: 30.

Если я настрою log4j2 так:

<RollingFile name="RollingFile">
  <FileName>C:/log/mylog.log</FileName>
  <FilePattern>C:/log/time-based-logs/%d{yyyy-MM-dd-hh-mm}.log.zip</FilePattern>
  <PatternLayout>
    <Pattern>%d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n</Pattern>
  </PatternLayout>
  <Policies>
    <TimeBasedTriggeringPolicy interval="2" modulate="true" />
  </Policies>
  <DefaultRolloverStrategy max="5" />
</RollingFile>

Я должен записать в данные журнала команду

log.info("test1")      // 2019-01-09 09:55:00

, а затем через 10 минут отправляет файл ролловера, но мне нужно каждые 30 секунд, даже больше не записывать данные в журнал.

Как я могу это сделать?

и я прошу прощения за мой плохой английский.

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Эта опция подошла для меня

public class Utils {
public static void rollover(LoggerContext loggerContext) {
    Map<String, Appender> appendersByName = loggerContext.getConfiguration().getAppenders();

    appendersByName.values().forEach(appender -> {
        if (appender instanceof RollingFileAppender) {
            ((RollingFileAppender) appender).getManager().checkRollover(new RolloverLogEvent());
        }
    });
}
}

@Plugin(name = "OnTriggeringPolicy", category = "Core", printObject = true)
public class OnCustomTriggeringPolicy implements TriggeringPolicy {

private RollingFileManager manager;

@PluginFactory
public static OnRolloverEventEventTriggeringPolicy createPolicy() {
    return new OnRolloverPolicy();
}

@Override
public void initialize(RollingFileManager manager) {
    this.manager = manager;
}

@Override
public boolean isTriggeringEvent(LogEvent logEvent) {

    return manager.getFileSize() > 0;
}
}
0 голосов
/ 09 января 2019

Использовать RollingFileAppender https://logback.qos.ch/manual/appenders.html#RollingFileAppender

И TimeBasedRollingPolicy https://logback.qos.ch/manual/appenders.html#TimeBasedRollingPolicy

Но это позволяет вам точить зерно до минуты (и каждую секунду, но не до 30-секундного периода).

Если этого вам недостаточно, напишите свой собственный RollingPolicy https://logback.qos.ch/apidocs/ch/qos/logback/core/rolling/RollingPolicy.html

Или просто расширить TimeBasedRollingPolicy, чтобы включить дополнительные функции https://logback.qos.ch/apidocs/ch/qos/logback/core/rolling/TimeBasedRollingPolicy.html

...