Как заставить удаление файла журнала работать с spring-boot-starter-log4j2? - PullRequest
1 голос
/ 25 мая 2019

Мой проект использует Slf4j версии 1.7.25 и spring-boot-starter-log4j2 v1.5.21.RELEASE. Я настроил файл log4j2.xml с действием Удалить. Удаление, кажется, не работает вообще. Я пытался добавить

<configuration status="trace">

Но он не показывает никаких журналов ошибок, относящихся к путям.

Вот вывод журнала:

2019-05-25 18:41:20,124 main DEBUG Building Plugin[name=Delete, class=org.apache.logging.log4j.core.appender.rolling.action.DeleteAction].
2019-05-25 18:41:20,124 main DEBUG createDeleteAction(basePath="/logs/hadoop/archive/", followLinks="false", maxDepth="2", testMode="false", PathSorter=null, ={IfAll[IfFileName(glob:okie-*.log.gz), IfLastModified(age=P1D)]}, ScriptCondition=null, Configuration(okieLog4j2Config))
2019-05-25 18:41:20,124 main DEBUG Building Plugin[name=DefaultRolloverStrategy, class=org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy].
2019-05-25 18:41:20,125 main DEBUG createStrategy(max="1", min="null", fileIndex="null", compressionLevel="null", ={DeleteAction[basePath=/logs/hadoop/archive, options=[], maxDepth=2, conditions=[IfAll[IfFileName(glob:okie-*.log.gz), IfLastModified(age=P1D)]]]}, stopCustomActionsOnError="true", Configuration(okieLog4j2Config))

Также, пожалуйста, посмотрите на мой конфигурационный XML-файл ниже

<?xml version="1.0" encoding="UTF-8"?>
<configuration name="okieLog4j2Config" status="trace"
  strict="true" monitorInterval="5">
  <properties>
    <property name="patternlayout">%d [%t] %-5level %logger{36} -
      %msg%n%throwable{full}
    </property>
  </properties>
  <appenders>
    <appender name="Console" type="Console" target="SYSTEM_OUT">
      <layout type="PatternLayout" pattern="${patternlayout}"/>
    </appender>
    <Routing name="File">
      <Routes pattern="$${ctx:ROUTING_KEY}">
        <Route>
          <RollingFile name="okie.log" bufferedIO="true" immediateFlush="true" append="true"
            fileName="logs/${ctx:ROUTING_KEY}/okie.log"
            filePattern="logs/${ctx:ROUTING_KEY}/archive/$${date:yyyy-MM}/okie-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout>
              <pattern>%d{ISO8601} [%t] %p %c %L - %m%n</pattern>
            </PatternLayout>
            <Policies>
              <TimeBasedTriggeringPolicy/>
              <!--<SizeBasedTriggeringPolicy size="10 MB"/>-->
            </Policies>
            <DefaultRolloverStrategy max="1">
              <Delete basePath="/logs/hadoop/archive/" maxDepth="2">
                <IfAll>
                  <IfFileName glob="okie-*.log.gz"/>
                  <IfLastModified age="1d"/>
                </IfAll>
              </Delete>
            </DefaultRolloverStrategy>
          </RollingFile>
        </Route>
      </Routes>
    </Routing>
  </appenders>
  <loggers>
    <Logger name="org.springframework" level="INFO">
      <AppenderRef ref="Console"/>
    </Logger>
    <root level="INFO">
      <appender-ref ref="Console" level="INFO"/>
      <appender-ref ref="File" level="WARN"/>
    </root>
  </loggers>
</configuration>

Файлы журнала генерируются, как задумано, с соответствующим именем, которое указывается во время выполнения, и работа по очереди также работает. Только удаление не происходит.

Также, пожалуйста, дайте мне знать, если мне нужно больше информации.

ОБНОВЛЕНИЕ РЕШЕНИЯ:

Косая черта "/" была проблемой в путях, которые я упомянул для удаления. Удаление это исправило это. Но я все еще удивляюсь, почему он не появился в журналах.

1 Ответ

2 голосов
/ 25 мая 2019

У меня есть небольшое приложение, чтобы попытаться использовать действие Удалить.Пока это работает для меня.

Пожалуйста, посмотрите пример на https://github.com/bigzidane/spring-boot-delete-log. Проверьте READMe.md, чтобы увидеть, как были удалены предыдущие журналы.

Пожалуйста, включите TRACE в вашемКонфигурация log4j (<Configuration status="TRACE" monitorInterval="30">), она поможет вам определить, почему действие «Удалить» не работает для вас, просто следуя журналам, которые вы видите в моем файле README.md.

Это может происходить из вашего путинастройки неверны (может быть, я здесь не прав), но с опцией TRACE, я думаю, вы можете узнать информацию самостоятельно.

Пример журнала с опцией Trace

2019-05-25 09:38:33.756 INFO WINDOWS-ESDA5FC --- [ main] c.e.SpringBootDeleteLogApp : Starting SpringBootDeleteLogApp on WINDOWS-ESDA5FC with PID 17236 (C:\Users\dotha\IdeaProjects\spring-boot-delete-log\target\classes started by dotha in C:\Users\dotha\IdeaProjects\spring-boot-delete-log)

2019-05-25 09:38:33.760 INFO WINDOWS-ESDA5FC --- [ main] c.e.SpringBootDeleteLogApp : No active profile set, falling back to default profiles: default

2019-05-25 09:38:33.798 INFO WINDOWS-ESDA5FC --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@338fc1d8: startup date [Sat May 25 09:38:33 CDT 2019]; root of context hierarchy

2019-05-25 09:38:33,802 main TRACE DefaultRolloverStrategy.purge() took 3.0 milliseconds

2019-05-25 09:38:33,804 main DEBUG RollingFileManager executing synchronous FileRenameAction[logs\log4j2-demo.log to logs\log4j2-demo-2019-05-25-2.log, renameEmptyFiles=false]

2019-05-25 09:38:33,805 main TRACE Renamed file C:\Users\dotha\IdeaProjects\spring-boot-delete-log\logs\log4j2-demo.log to C:\Users\dotha\IdeaProjects\spring-boot-delete-log\logs\log4j2-demo-2019-05-25-2.log with Files.move

2019-05-25 09:38:33,806 main DEBUG RollingFileManager executing async CompositeAction[DeleteAction[basePath=logs, options=[], maxDepth=1, conditions=[IfFileName(glob:log4j2-demo-*.log), IfLastModified(age=PT1M)]]]

2019-05-25 09:38:33,806 main DEBUG Now writing to logs/log4j2-demo.log at 2019-05-25T09:38:33.806-0500

2019-05-25 09:38:33,807 Log4j2-TF-2-RollingFileManager-3 DEBUG Starting DeleteAction[basePath=logs, options=[], maxDepth=1, conditions=[IfFileName(glob:log4j2-demo-*.log), IfLastModified(age=PT1M)]]

2019-05-25 09:38:33,809 Log4j2-TF-2-RollingFileManager-3 DEBUG DeleteAction complete in 0.001881032 seconds

2019-05-25 09:38:33,810 Log4j2-TF-2-RollingFileManager-3 TRACE Sorted paths:

2019-05-25 09:38:33,810 Log4j2-TF-2-RollingFileManager-3 TRACE logs\log4j2-demo.log (modified: 2019-05-25T14:38:33.807885Z)

2019-05-25 09:38:33,812 Log4j2-TF-2-RollingFileManager-3 TRACE logs\log4j2-demo-2019-05-25-2.log (modified: 2019-05-25T14:38:33.803895Z)

2019-05-25 09:38:33,812 Log4j2-TF-2-RollingFileManager-3 TRACE logs\log4j2-demo-2019-05-25-1.log (modified: 2019-05-25T14:36:13.862034Z)

2019-05-25 09:38:33,812 Log4j2-TF-2-RollingFileManager-3 TRACE IfFileName REJECTED: 'glob:log4j2-demo-*.log' does not match relative path 'log4j2-demo.log'

2019-05-25 09:38:33,812 Log4j2-TF-2-RollingFileManager-3 TRACE Not deleting base=logs, relative=log4j2-demo.log

2019-05-25 09:38:33,812 Log4j2-TF-2-RollingFileManager-3 TRACE IfFileName ACCEPTED: 'glob:log4j2-demo-*.log' matches relative path 'log4j2-demo-2019-05-25-2.log'

2019-05-25 09:38:33,813 Log4j2-TF-2-RollingFileManager-3 TRACE IfLastModified REJECTED: log4j2-demo-2019-05-25-2.log ageMillis '9' < 'PT1M'

2019-05-25 09:38:33,813 Log4j2-TF-2-RollingFileManager-3 TRACE Not deleting base=logs, relative=log4j2-demo-2019-05-25-2.log

2019-05-25 09:38:33,813 Log4j2-TF-2-RollingFileManager-3 TRACE IfFileName ACCEPTED: 'glob:log4j2-demo-*.log' matches relative path 'log4j2-demo-2019-05-25-1.log'

2019-05-25 09:38:33,813 Log4j2-TF-2-RollingFileManager-3 TRACE IfLastModified ACCEPTED: log4j2-demo-2019-05-25-1.log ageMillis '139951' >= 'PT1M'

**2019-05-25 09:38:33,813 Log4j2-TF-2-RollingFileManager-3 TRACE Deleting logs\log4j2-demo-2019-05-25-1.log**

Удачи,

...