spring 引导日志中的 %PARSER_ERROR[wex]
%PARSER_ERROR[wex] in spring boot logging
我的日志文件中偶尔会出现以下错误字符串。我是 运行 一个使用 spring 引导的 spring 云应用程序。我使用包含另一个配置文件的日志返回配置文件。
spring 引导版本是 v1.2.3 (Spring cloud 1.0.1)。
%PARSER_ERROR[wex]2015-06-01 12:30:22.180 DEBUG 6833 --- [http-nio-9000-exec-1] ...其余日志消息
我看到了这个条目(Spring Boot - logback PARSER_ERROR),但似乎不适用。
logback.xml 文件是:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_FILE" value="logs/myservice.log"/>
<!-- the rollover settings with mean a max size per log of 100Mb and 7 days -->
<property name="MAX_HISTORY" value="7"/>
<property name="MAX_FILE_SIZE" value="100MB"/>
<!-- the specific loggers -->
<logger name="com.companyx" level="DEBUG"/>
<logger name="org.springframework" level="ERROR"/>
<logger name="org.springframework.security.oauth2" level="INFO"/>
<logger name="org.springframework.integration" level="OFF"/>
<logger name="org.springframework.oxm" level="OFF"/>
<logger name="org.springframework.http" level="ERROR"/>
<logger name="com.netflix.discovery" level="OFF"/>
<logger name="com.netflix.eureka.util.AwsAsgUtil" level="OFF"/>
<logger name="com.mangofactory.swagger.scanners" level="OFF"/>
<include resource="com/companyx/services/common/logging/baselog.xml"/>
</configuration>
包含的 baselog.xml 文件是:
<?xml version="1.0" encoding="UTF-8"?>
<included>
<!-- turn on JMX configuration -->
<jmxConfigurator />
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex"
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<property name="CONSOLE_LOG_PATTERN"
value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS, Zulu}){faint} %clr(%5p) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wex"/>
<property name="FILE_LOG_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss.SSS, Zulu} %5p ${PID:- } --- [%t] %-40.40logger{39} : %m%n%wex"/>
<appender name="DEBUG_LEVEL_REMAPPER" class="org.springframework.boot.logging.logback.LevelRemappingAppender">
<destinationLogger>org.springframework.boot</destinationLogger>
</appender>
<logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/>
<logger name="org.apache.catalina.util.LifecycleBase" level="ERROR"/>
<logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/>
<logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN"/>
<logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN"/>
<logger name="org.crsh.plugin" level="WARN"/>
<logger name="org.crsh.ssh" level="WARN"/>
<logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="ERROR"/>
<logger name="org.hibernate.validator.internal.util.Version" level="WARN"/>
<logger name="org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration" level="WARN"/>
<logger name="org.springframework.boot.actuate.endpoint.jmx" additivity="false">
<appender-ref ref="DEBUG_LEVEL_REMAPPER"/>
</logger>
<logger name="org.thymeleaf" additivity="false">
<appender-ref ref="DEBUG_LEVEL_REMAPPER"/>
</logger>
<!-- declare the different appenders -->
<!-- declare the appender that writes to the console -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<!-- declare the appender that writes to the log file -->
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<file>${LOG_FILE}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<!-- keep 30 days' worth of history -->
<maxHistory>${MAX_HISTORY}</maxHistory>
</rollingPolicy>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>${MAX_HISTORY}</maxHistory>
</rollingPolicy>
</appender>
<!-- default logging levels, unless we overwrite then use INFO-->
<root>
<level value="INFO"/>
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/>
</root>
<!-- application overrides will be added in files that include this one -->
</included>
事实证明,在我们的案例中,问题出在我们使用的 ELK 系统中。我们 运行 一个 Elasticsearch-Logstash-Kibana 日志收集系统,收集日志的日志存储代理在传递日志记录时将 %PARSER_ERROR%[wex] 插入到日志记录中。
在我们得到可接受的解决方法后,问题就解决了。
就我而言,问题是由以下格式引起的,我从另一个项目(它运行良好)复制了以下格式
%m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
将格式更改为
后
%m%n${LOG_EXCEPTION_CONVERSION_WORD:-%rEx}
我们不再收到此错误。
奇怪的是,这两个项目都使用 logback-core-1.1.8 和 logback-classic-1.1.8,它们都基于 slf4j。唯一的区别是 wEx 格式用于 Spring Boot 项目,而 rEx 格式用于较旧的 Spring 3 项目。
请在您的 Logback.xml
中包含 Spring 提供的 default.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
如果您查看 org/springframework/boot/logging/logback/defaults.xml line 9,您会发现 wex
是由 Spring 引导定义的自定义 conversionRule
,使用 Spring引导 class,因此如果没有在您的 logback.xml
中定义该 conversionRule 并且在您的 class 路径中定义 class,它将无法工作。
任何不在 Spring Boot 上的人都可以使用开箱即用的异常转换规则之一,例如 %ex
:https://logback.qos.ch/manual/layouts.html#conversionWord
我的日志文件中偶尔会出现以下错误字符串。我是 运行 一个使用 spring 引导的 spring 云应用程序。我使用包含另一个配置文件的日志返回配置文件。 spring 引导版本是 v1.2.3 (Spring cloud 1.0.1)。
%PARSER_ERROR[wex]2015-06-01 12:30:22.180 DEBUG 6833 --- [http-nio-9000-exec-1] ...其余日志消息
我看到了这个条目(Spring Boot - logback PARSER_ERROR),但似乎不适用。
logback.xml 文件是:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_FILE" value="logs/myservice.log"/>
<!-- the rollover settings with mean a max size per log of 100Mb and 7 days -->
<property name="MAX_HISTORY" value="7"/>
<property name="MAX_FILE_SIZE" value="100MB"/>
<!-- the specific loggers -->
<logger name="com.companyx" level="DEBUG"/>
<logger name="org.springframework" level="ERROR"/>
<logger name="org.springframework.security.oauth2" level="INFO"/>
<logger name="org.springframework.integration" level="OFF"/>
<logger name="org.springframework.oxm" level="OFF"/>
<logger name="org.springframework.http" level="ERROR"/>
<logger name="com.netflix.discovery" level="OFF"/>
<logger name="com.netflix.eureka.util.AwsAsgUtil" level="OFF"/>
<logger name="com.mangofactory.swagger.scanners" level="OFF"/>
<include resource="com/companyx/services/common/logging/baselog.xml"/>
</configuration>
包含的 baselog.xml 文件是:
<?xml version="1.0" encoding="UTF-8"?>
<included>
<!-- turn on JMX configuration -->
<jmxConfigurator />
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex"
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<property name="CONSOLE_LOG_PATTERN"
value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS, Zulu}){faint} %clr(%5p) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wex"/>
<property name="FILE_LOG_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss.SSS, Zulu} %5p ${PID:- } --- [%t] %-40.40logger{39} : %m%n%wex"/>
<appender name="DEBUG_LEVEL_REMAPPER" class="org.springframework.boot.logging.logback.LevelRemappingAppender">
<destinationLogger>org.springframework.boot</destinationLogger>
</appender>
<logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/>
<logger name="org.apache.catalina.util.LifecycleBase" level="ERROR"/>
<logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/>
<logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN"/>
<logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN"/>
<logger name="org.crsh.plugin" level="WARN"/>
<logger name="org.crsh.ssh" level="WARN"/>
<logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="ERROR"/>
<logger name="org.hibernate.validator.internal.util.Version" level="WARN"/>
<logger name="org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration" level="WARN"/>
<logger name="org.springframework.boot.actuate.endpoint.jmx" additivity="false">
<appender-ref ref="DEBUG_LEVEL_REMAPPER"/>
</logger>
<logger name="org.thymeleaf" additivity="false">
<appender-ref ref="DEBUG_LEVEL_REMAPPER"/>
</logger>
<!-- declare the different appenders -->
<!-- declare the appender that writes to the console -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<!-- declare the appender that writes to the log file -->
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<file>${LOG_FILE}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<!-- keep 30 days' worth of history -->
<maxHistory>${MAX_HISTORY}</maxHistory>
</rollingPolicy>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>${MAX_HISTORY}</maxHistory>
</rollingPolicy>
</appender>
<!-- default logging levels, unless we overwrite then use INFO-->
<root>
<level value="INFO"/>
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/>
</root>
<!-- application overrides will be added in files that include this one -->
</included>
事实证明,在我们的案例中,问题出在我们使用的 ELK 系统中。我们 运行 一个 Elasticsearch-Logstash-Kibana 日志收集系统,收集日志的日志存储代理在传递日志记录时将 %PARSER_ERROR%[wex] 插入到日志记录中。
在我们得到可接受的解决方法后,问题就解决了。
就我而言,问题是由以下格式引起的,我从另一个项目(它运行良好)复制了以下格式
%m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
将格式更改为
后%m%n${LOG_EXCEPTION_CONVERSION_WORD:-%rEx}
我们不再收到此错误。
奇怪的是,这两个项目都使用 logback-core-1.1.8 和 logback-classic-1.1.8,它们都基于 slf4j。唯一的区别是 wEx 格式用于 Spring Boot 项目,而 rEx 格式用于较旧的 Spring 3 项目。
请在您的 Logback.xml
中包含 Spring 提供的 default.xml<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
如果您查看 org/springframework/boot/logging/logback/defaults.xml line 9,您会发现 wex
是由 Spring 引导定义的自定义 conversionRule
,使用 Spring引导 class,因此如果没有在您的 logback.xml
中定义该 conversionRule 并且在您的 class 路径中定义 class,它将无法工作。
任何不在 Spring Boot 上的人都可以使用开箱即用的异常转换规则之一,例如 %ex
:https://logback.qos.ch/manual/layouts.html#conversionWord