我正在使用带有LogBack的SpringBoot并在我的yml文件中使用以下配置:
logging:
path: C:/var/log/pincode
logging.path将Spring Environment变量传送到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.
然后它再次开始配置logback,但这次使用我设置的路径:
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.
我的logback.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在解析yml之前是在哪里加载xml?
如何避免Logback创建此LOG_PATH_IS_UNDEFINED目录?
答案 0 :(得分:12)
在您的情况下,LOG_PATH
未在启动时定义。您应该使用${LOG_PATH:-.}
代替See。
但如果您在logging.path
中定义application.properties
,则会在.
和${logging.path}
目录中看到两个日志文件。
Spring容器集LOG_PATH
...据我所知,不支持使用lazy文件创建Logback。在这种情况下,您应该使用logback-spring.xml
代替logback.xml
。
答案 1 :(得分:4)
我遇到了类似的问题,很容易解决。基本上,概念是Spring Boot已经为Spring Boot属性提供了System属性 - LOG_PATH
- logging.path
所以你在application.properties中定义logging.path
并简单地使用LOG_PATH
您的回归配置 - logback-spring.xml
。
您不应为<property ...>
声明注销LOG_PATH
,只需随时使用即可。
见近底here
答案 2 :(得分:2)
我遇到了同样的问题。 在logback.xml中放入一个条目
<property resource="application.properties" />
在application.properties
中FILE_LOG_PATTERN=###
LOG_FILE=###
当您的应用程序启动时,创建的目录的名称是您在属性文件中定义的名称。
答案 3 :(得分:1)
我遇到了同样的问题。我尝试定义自己的logback.xml,但在使用application.properties文件中定义的logging.path和logging.file属性时遇到了麻烦。以下是我解决(并解决)问题的方法。
首先,我了解到您无法同时定义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仍然抱怨日志文件未定义,并在当前目录中创建一个名为LOG_FILE_IS_UNDEFINED_XXX
的空文件。但是我的属性中的实际日志文件已创建并正确附加到。
安德鲁
答案 4 :(得分:1)
如果您将Spring Boot版本升级到 pom.xml ,请确保已替换
logging.path =您的/日志/路径
作者
logging.file.path =您的/日志/路径
进入 application.properties 。那是我的情况。
答案 5 :(得分:1)
基于Spring Boot common properties, 将以下内容添加到您的application.yml
logging:
file:
path: logs/dev
如果使用application.properties,则应为
logging.file.path = logs/dev
答案 6 :(得分:1)
我遇到了同样的问题,因为我在application.properties上配置了logging.path和logging.file,但是在Spring Boot LogBack配置之前生成了一些日志,因此将它们写入LOG_PATH_IS_UNDEFINED / LOG_FILE_IS_UNDEFINED文件,然后将日志切换到右侧位置。
我找到了2种可能的解决方案:
1)在bootstrap.properties中配置logging.path和logging.file,因为bootstrap中的配置发生在
之前或
2)启动应用程序时,使用-Dlogging.path = ... -Dlogging.file = ...将logging.path和logging.file设置为系统属性
答案 7 :(得分:1)
可能不是您的情况,但如果您bootstrap.properties
确保logging.path
在那里定义并且仅在那里定义。
答案 8 :(得分:0)
要从.yml文件中的外部路径调用logback,它对我有用:
日志记录: config:C:/folder/logback.xml
答案 9 :(得分:0)
在准备Spring Boot环境之前,Spring Boot主类或SpringApplication
将初始化loggerfactory,它将检测默认配置文件(logback.groovy
,logback.xml
,{{1但是,此时Spring Boot应用程序尚未启动,这意味着未设置变量logback-test.xml
。因此,首先应该更改logback配置文件的名称,并在Spring Boot配置中手动配置文件名LOG_PATH
。通过这种方式,logback将默认配置控制台appender而不是创建文件appender,然后当Spring Boot环境准备就绪时,它将触发enviromentready事件,这将导致logging.config
重新配置logback。您可以在springboot的页面https://github.com/spring-projects/spring-boot/issues/2558
答案 10 :(得分:0)
某处Spring正在解析yml
之前加载xml
所以只需将 logback.xml 重命名为 your-logback.xml 并在application.properties中添加 int size = mSectionsPagerAdapter.getCount();
for (int i = 0; i < size; i++) {
Fragment fragment = mSectionsPagerAdapter.getItem(i);
if (fragment != null && fragment instanceof FeedsFragment) {
((FeedsFragment)fragment).doFeedsQuery();
}
}
答案 11 :(得分:0)
尝试将以下内容添加到您的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 :(得分:0)
在logback中输入一个条目:
<property name="DEV_HOME" value="c:/application_logs/ps-web" />
并参考:
<fileNamePattern>${DEV_HOME}.%d{yyyy-MM-dd}.log</fileNamePattern>
答案 13 :(得分:0)
如果您使用的是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
。
答案 14 :(得分:0)
版本:1.5.9
bootstrap.yml
spring:
application:
name: awesome-app
# profile:
# active: dev
logging:
path: /code/awesome-app
spring-logback.xml
${LOG_PATH}/awesome-app.log
application.yml
spring:
application:
name: awesome-app
# profile:
# active: dev
logging:
path: /code/awesome-app
spring-logback.xml
${LOG_PATH}/awesome-app.log
答案 15 :(得分:0)
执行以下操作仅创建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"/>
请勿使用以下行,否则将永远不会禁用控制台日志,并且会在temp目录中创建spring.log文件(如果您未在application.properties中提供logging.path)。查看下面文件的代码以了解更多信息。
<include resource="org/springframework/boot/logging/logback/base.xml"/>
答案 16 :(得分:0)
我也有类似的问题。我通过将logback-spring.xml重命名为logback-whatever.xml并在application.properties中添加以下内容来解决它:
logging.config = classpath:logback-whatever.xml
此外,当我们将用户定义的属性用于记录目的时,也会出现此问题,例如:
log.path =日志 log.archive.path =已存档
答案 17 :(得分:0)
我想你已经包含了一个错误文件。 请更改
<include resource="org/springframework/boot/logging/logback/basic.xml" />
到
<include resource="org/springframework/boot/logging/logback/base.xml"/>
然后试一试。
答案 18 :(得分:0)
在logback.xml中声明属性LOG_PATH
<property name="LOG_PATH" value="" />
是您必须指定创建日志文件的目录的位置。如果此字段为空,则logback将在程序执行中创建新目录。创建的目录名称为LOG_PATH_IS_UNDEFINED
答案 19 :(得分:0)
对我有用的东西
答案 20 :(得分:0)
大家新年快乐! 因此,我已将 Spring Boot 更新到版本 (2.4.1),并且开始出现 LOG_PATH_IS_UNDEFINED 错误。
我做了一些研究,我猜测从 logging.path 到 LOG_PATH 的属性映射存在问题。 (我手动调试了记录器并且正在加载属性)
我的解决方案/补丁:
我在最顶部添加了到 logback-spring.xml 的手动映射:
<springProperty scope="context" name="LOG_PATH" source="logging.path"/>
现在它对我有用...