Я использую SpringBoot с LogBack и используя приведенную ниже конфигурацию в своем yml файле:
logging:
path: C:/var/log/pincode
Logging.path Spring Переменная среды переносится в переменную среды LOG_PATH, и файл журнала помещается в нужное место, но есть также каталог LOG_PATH_IS_UNDEFINED, созданный в корневом каталоге моего проекта.
Это, по-видимому, вызвано тем, что SpringBoot использует другую фазу, чтобы настроить LogBack с переменными среды.
17:29:21,325 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
17:29:21,337 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - Will use the pattern LOG_PATH_IS_UNDEFINED/catalina.out.%d{yyyy-MM-dd} for the active file
17:29:21,340 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyy-MM-dd' from file name pattern 'LOG_PATH_IS_UNDEFINED/catalina.out.%d{yyyy-MM-dd}'.
17:29:21,340 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll-over at midnight.
17:29:21,343 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Mon Aug 11 17:24:07 BRT 2014
17:29:21,346 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[serverConsole] - Active log file name: LOG_PATH_IS_UNDEFINED/catalina.out
17:29:21,346 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[serverConsole] - File property is set to [LOG_PATH_IS_UNDEFINED/catalina.out]
...
17:29:21,358 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
И затем после этого он снова начнет настраивать журнал, но на этот раз с помощью установленного вами пути:
17:29:21,672 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
17:29:21,673 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - No compression will be used
17:29:21,673 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - Will use the pattern C:/var/log/pincode//catalina.out.%d{yyyy-MM-dd} for the active file
17:29:21,674 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyy-MM-dd' from file name pattern 'C:/var/log/pincode//catalina.out.%d{yyyy-MM-dd}'.
17:29:21,674 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll-over at midnight.
17:29:21,674 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Mon Aug 11 17:29:21 BRT 2014
17:29:21,674 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[serverConsole] - Active log file name: C:/var/log/pincode//catalina.out
17:29:21,674 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[serverConsole] - File property is set to [C:/var/log/pincode//catalina.out]
...
17:29:21,685 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
Мой журнал .xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<include resource="org/springframework/boot/logging/logback/basic.xml" />
<property name="FILE_LOG_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } [%t] --- %-40.40logger{39} : %m%n%wex" />
<appender name="serverConsole"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<Append>true</Append>
<File>${LOG_PATH}/catalina.out</File>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/catalina.out.%d{yyyy-MM-dd}
</fileNamePattern>
<maxHistory>15</maxHistory>
</rollingPolicy>
</appender>
<!-- Plain Text Rolling Appender -->
<appender name="server"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<Append>true</Append>
<File>${LOG_PATH}/pincode.log</File>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/pincode.log.%d{yyyy-MM-dd}
</fileNamePattern>
<maxHistory>15</maxHistory>
</rollingPolicy>
</appender>
<!-- Plain Text Rolling Appender -->
<appender name="server-error"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<Append>true</Append>
<File>${LOG_PATH}/pincode-error.log</File>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/pincode-error.log.%d{yyyy-MM-dd}
</fileNamePattern>
<maxHistory>15</maxHistory>
</rollingPolicy>
</appender>
<logger name="com.app" level="INFO">
<appender-ref ref="server" />
<appender-ref ref="server-error" />
</logger>
<root level="INFO">
<appender-ref ref="serverConsole" />
</root>
Если я удалю файл logback.xml из проекта, он не создает папку, поэтому где-то Spring загружает xml перед разбором yml?
Как я могу избежать Logback для создания этого каталога LOG_PATH_IS_UNDEFINED?
Ответ 1
В вашем случае LOG_PATH
не определяется при запуске. Вы должны использовать ${LOG_PATH:-.}
Вместо этого, см.
Но если вы определите logging.path
в вашем application.properties
вы увидите два файла журнала .
и в ${logging.path}
.
Spring контейнер установлен LOG_PATH
после инициализации Logback... Logback не поддерживается создание ленивых файлов, насколько я знаю. В этом случае вы должны использовать logback-spring.xml
вместо logback.xml
.
Ответ 2
Я столкнулся с подобной проблемой и ее легко решить. В принципе, концепция заключается в том, что Spring Boot уже предоставляет вам свойство System - LOG_PATH
для Spring свойство загрузки - logging.path
, поэтому вы определяете logging.path
в своих приложениях .properties и просто используете LOG_PATH
в своей конфигурации резервного копирования - logback-spring.xml
.
Нельзя объявлять журнал <property ...>
для LOG_PATH
, просто используйте его, когда захотите.
Смотрите внизу внизу здесь
Ответ 3
Я столкнулся с той же проблемой.
поместите запись в logback.xml
<property resource="application.properties" />
В application.properties
FILE_LOG_PATTERN=###
LOG_FILE=###
когда ваше приложение запускается, имя созданного каталога - это то, что вы определили в файле свойств.
Ответ 4
Я столкнулся с той же проблемой. Я попытался определить свой собственный файл logback.xml и имел проблемы с использованием свойств logging.path и logging.file, определенных в файле application.properties. Вот как я решил (и работал) проблемы.
Сначала я узнал, что вы не можете определить свойства logging.path и logging.file. Поскольку я использую RollingFileAppender, который будет создавать несколько файлов в течение нескольких дней, я определяю файл logging.file, но использую его больше как префикс файла.
В application.properties
# Don't add the file type at the end. This will be added in logback.xml
logging.file=logs/my-app-name
В src/main/resources/logback.xml
<configuration>
<property name="FILE_LOG_PATTERN" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>${FILE_LOG_PATTERN}</Pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<Pattern>${FILE_LOG_PATTERN}</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
Похоже, что это работает по большей части. Я определил свой собственный файл FILE_LOG_PATTERN в файле, который, я думаю, является необязательным. Интересной частью является fileNamePattern. Он корректно переводит logging.file из моего файла application.properties в переменную LOG_FILE. Единственное реальное уродство здесь заключается в том, что при запуске Logback все еще жалуется на файл журнала undefined и создает пустой файл с именем LOG_FILE_IS_UNDEFINED_XXX
в текущем каталоге. Но фактический файл журнала в моей собственности создан и правильно добавлен.
Эндрю
Ответ 5
Перед подготовкой SpringApplication
Spring Boot основной класс Spring Boot или SpringApplication
инициализирует фабрику logger, которая обнаружит файл конфигурации по умолчанию (logback.groovy
, logback.xml
, logback-test.xml
), но в это время Spring Boot приложение еще не запущено, что означает, что переменная LOG_PATH
не установлена. Поэтому сначала вы должны изменить имя вашего файла конфигурации logback и вручную настроить имя файла в конфигурации Spring Boot как logging.config
. Таким образом, при входе в систему по умолчанию консольный приложение будет настраиваться вместо создания файлового приложения, а затем, когда среда Spring Boot будет готова, оно запускает событие enviromentready, что вызывает повторное конфигурирование LoggingApplicationListener
в систему с помощью LoggingApplicationListener
. Вы можете найти проблему на странице Springboot https://github.com/spring-projects/spring-boot/issues/2558
Ответ 6
logging.path
это не ваш случай, но если у вас есть bootstrap.properties
убедитесь, что logging.path
определен там и только там.
Ответ 7
У меня была та же проблема, так как я настроил logging.path и logging.file для application.properties, но некоторые журналы создавались до конфигурации Spring Boot LogBack, поэтому они были записаны в файл LOG_PATH_IS_UNDEFINED/LOG_FILE_IS_UNDEFINED, а затем журналы переключились в нужное место.
Я нашел 2 возможных решения:
1) Сконфигурируйте logging.path и logging.file в bootstrap.properties, поскольку конфигурация в начальной загрузке выполняется до
или же
2) Установите logging.path и logging.file как системные свойства с помощью -Dlogging.path =... -Dlogging.file =... при запуске приложения.
Ответ 8
Объявить свойство LOG_PATH в вашем файле logback.xml
<property name="LOG_PATH" value="" />
где вы должны указать каталог, в котором создаются файлы журнала. Если это поле оставлено пустым, logback создаст новый каталог при выполнении программы. Имя созданного каталога: LOG_PATH_IS_UNDEFINED
Ответ 9
Я полагаю, вы включили файл ошибок. Пожалуйста измените
<include resource="org/springframework/boot/logging/logback/basic.xml" />
в
<include resource="org/springframework/boot/logging/logback/base.xml"/>
тогда попробуйте.
Ответ 10
введите запись в logback:
<property name="DEV_HOME" value="c:/application_logs/ps-web" />
и ссылайтесь на него:
<fileNamePattern>${DEV_HOME}.%d{yyyy-MM-dd}.log</fileNamePattern>
Ответ 11
Попробуйте добавить в свой файл POM следующее:
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<filesets>
<fileset>
<directory>${basedir}/catalina.base_IS_UNDEFINED</directory>
<includes>
<include>**/*.log</include>
</includes>
<followSymlinks>false</followSymlinks>
</fileset>
</filesets>
</configuration>
</plugin>
Ответ 12
где-то Spring загружается xml перед разбором yml
поэтому просто переименуйте logback.xml в ваш-logback.xml и добавьте logging.config=classpath:your-logback.xml
в application.properties
Ответ 13
Чтобы вызвать форму журнала внешнего пути в файле .yml, он работал у меня как:
протоколирование: config: C:/folder/logback.xml
Ответ 14
если вы используете Spring Boot Finchley (2.x), вы можете определить spring.application.name
в файле application.properties
или application.yml
и добавить следующее в конфигурацию Logback:
<configuration>
<springProperty scope="context" name="springAppName" source="spring.application.name"/>
</configuration>
Теперь вы будете иметь ${springAppName}
в качестве переменной для вашего pattern
журнала.
Ответ 15
версия: 1.5.9
- springcloud:
bootstrap.yml
spring:
application:
name: awesome-app
# profile:
# active: dev
logging:
path: /code/awesome-app
spring-logback.xml
${LOG_PATH}/awesome-app.log
- springboot:
application.yml
spring:
application:
name: awesome-app
# profile:
# active: dev
logging:
path: /code/awesome-app
spring-logback.xml
${LOG_PATH}/awesome-app.log
настраиваемая конфигурация журнала: https://docs.spring.io/spring-boot/docs/1.5.6.RELEASE/reference/htmlsingle/#boot-features-custom-log-configuration
Ответ 16
Сделайте ниже, чтобы создать только каталог dev/log. Не добавляйте log.path
в application.properties
Добавьте log.path=dev/logs
в ваши bootstrap.properties
.
Добавьте строку ниже в вашем logback-spring.xml.
<springProperty scope="context" name="LOG_PATH" source="log.path"/>
<property name="LOG_FILE" value="${LOG_PATH}/app/current"/>
Примечание. Обязательно указывайте только нижнюю строку.
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
Не используйте строку ниже, иначе журналы консоли никогда не будут отключены, и файл spring.log будет создан во временном каталоге (если вы не указали logging.path в application.properties). Проверьте код файла ниже, чтобы узнать больше.
<include resource="org/springframework/boot/logging/logback/base.xml"/>
Ответ 17
У меня тоже была похожая проблема. Я решил это, переименовав logback-spring.xml в logback-what.xml и добавив ниже в application.properties:
logging.config = путь к классам: Logback-whatever.xml
Кроме того, эта проблема возникает, когда мы используем определенные пользователем свойства для ведения журнала, например:
log.path = logs log.archive.path = в архиве