Log4j2 - Ошибка поиска среды - Имя среды не добавляется к имени файла - PullRequest
0 голосов
/ 06 мая 2020

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

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>

    <!-- Console Appender -->
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n" />
    </Console>

    <!-- Rolling File Appender -->
    <RollingFile name="RollingFile">
      <FileName>C:/MyLogDir/logs/${env:LOG_FILE_NAME}</FileName>
      <FilePattern>C:/MyLogDir/logs/job_log_collector.%d{yyyy-MM-dd}.log.zip</FilePattern>
      <PatternLayout>
        <Pattern>%d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n</Pattern>
      </PatternLayout>
      <Policies>
        <TimeBasedTriggeringPolicy interval="1" modulate="true" />
      </Policies>
      <DefaultRolloverStrategy max="5" />
    </RollingFile>

  </Appenders>
  <Loggers>
    <Logger name="com.package.name.AppName" level="debug" additivity="false">
      <AppenderRef ref="RollingFile" />
    </Logger>
  </Loggers>
</Configuration>

Но я получаю ошибку ниже при попытке запустить этот запуск.

2020-05-06 23:03:27,130 main ERROR Unable to create file C:/MyLogDir/logs/${env:LOG_FILE_NAME} java.io.IOException: The filename, directory name, or volume label syntax is incorrect
    at java.io.WinNTFileSystem.canonicalize0(Native Method)
    at java.io.WinNTFileSystem.canonicalize(WinNTFileSystem.java:428)
    at java.io.File.getCanonicalPath(File.java:618)
    at java.io.File.getCanonicalFile(File.java:643)
    at org.apache.logging.log4j.core.util.FileUtils.makeParentDirs(FileUtils.java:142)
    at org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory.createManager(RollingFileManager.java:658)
    at org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory.createManager(RollingFileManager.java:639)
    at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:113)
    at org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:114)
    at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.getFileManager(RollingFileManager.java:209)
    at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:146)
    at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:62)
    at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:122)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:1002)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:942)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:934)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:552)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:241)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:288)
    at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:618)
    at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:691)
    at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:708)
    at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:263)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:153)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
    at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
    at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:602)
    at com.wiley.automation.JobLogCollector.App.<clinit>(App.java:11)

Я пробовал оба $ {env: LOG_FILE_NAME} и $$ {env: LOG_FILE_NAME} . Но не повезло.

Используемые ниже зависимости.

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.13.0</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.13.0</version>
</dependency>

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Ваша конфигурация выглядит правильно. Если у вас определена переменная среды с именем LOG_FILE_NAME, это должно работать. Log4j EnvironmentLookup просто вызывает System.getenv (ключ), где ключ будет "LOG_FILE_NAME". Вы должны проверить в своем приложении, что эта переменная доступна в среде. Вы можете добавить System.out.println(System.getEnv()) к своему основному методу для вывода всех переменных среды.

Вы также можете добавить status = "debug" в свою конфигурацию ведения журнала, но я сомневаюсь, что он предоставит вам больше диагностики c информация, чем та, что у вас уже есть.

0 голосов
/ 06 мая 2020

Удалите env: из xml и попробуйте следующий синтаксис

 <FileName>C:/MyLogDir/logs/${LOG_FILE_NAME}</FileName>
...