Spring 引导应用引擎日志格式不正确
Spring boot app engine logs not properly formatted
我已经在 Appengine 上部署了一个 spring boot 2 应用程序,它运行良好。
唯一的问题是标准日志记录机制与gcp日志记录系统冲突。我得到的是数百个信息日志,即使在抛出异常或警告时也是如此。
我认为问题在于日志真的很长并且以一些不必要的数据开头。
在我的配置中,我使用 lombok+Slf4j 登录我的应用程序,我认为默认情况下会启用 logback,因为我已经 spring-boot-starter-web.
我的 pom 有这些依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-data-datastore</artifactId>
</dependency>
<!--Standard dep-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-1.0-sdk</artifactId>
<version>${appengine.target.version}</version>
</dependency>
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client-appengine</artifactId>
<version>1.29.2</version>
</dependency>
<!--Provided-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!--Test related-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
并且在资源文件夹中我有 spring boot page for app engine 中建议的 logging.properties 文件(避免在启动期间出现堆栈溢出错误)
唯一的区别是,如果我排除 jul-to-slf4j,我将不会在控制台中看到任何日志。
有谁是 logback/spring boot 方面的专家,可以为我指明正确的方向吗?
将 logback.xml 文件添加到项目的资源文件夹中。 Spring boot 将在启动时加载它,它将覆盖与 spring boot 捆绑的默认 logback 配置。
在您的 logback.xml 中,您可以定义自己的日志记录模式并删除不必要的数据。
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>
上面的示例不包含时间戳或日志模式中的线程。您可以更改它以适合您的特定用例。
更新
或者,您可以通过应用程序覆盖日志模式来实现此目的 属性。
用于控制台日志记录
logging.pattern.console=%-5level %logger{36} - %msg%n
用于文件记录
logging.pattern.file=%-5level %logger{36} - %msg%n
您可以在此处找到有关日志记录模式各部分含义的解释:
https://logback.qos.ch/manual/layouts.html#conversionWord
最后,我没有找到在 spring 启动的 App Engine 标准中通过控制台打印机显示日志的正确方法。但是,通过使用 stackdriver api,日志确实更漂亮。
我所做的包括:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-logging</artifactId>
</dependency>
并且在 logback-spring.xml
<include resource="org/springframework/cloud/gcp/autoconfigure/logging/logback-appender.xml"/>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<springProfile name="local">
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
</springProfile>
<springProfile name="!local">
<root level="INFO">
<appender-ref ref="STACKDRIVER"/>
</root>
</springProfile>
然而,主请求日志级别不显示最高日志级别(但 "any log value")使得过滤更加困难。
另一方面,错误报告起作用是因为内部日志设置了正确的级别。
我已经在 Appengine 上部署了一个 spring boot 2 应用程序,它运行良好。
唯一的问题是标准日志记录机制与gcp日志记录系统冲突。我得到的是数百个信息日志,即使在抛出异常或警告时也是如此。
我认为问题在于日志真的很长并且以一些不必要的数据开头。
在我的配置中,我使用 lombok+Slf4j 登录我的应用程序,我认为默认情况下会启用 logback,因为我已经 spring-boot-starter-web.
我的 pom 有这些依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-data-datastore</artifactId>
</dependency>
<!--Standard dep-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-1.0-sdk</artifactId>
<version>${appengine.target.version}</version>
</dependency>
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client-appengine</artifactId>
<version>1.29.2</version>
</dependency>
<!--Provided-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!--Test related-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
并且在资源文件夹中我有 spring boot page for app engine 中建议的 logging.properties 文件(避免在启动期间出现堆栈溢出错误)
唯一的区别是,如果我排除 jul-to-slf4j,我将不会在控制台中看到任何日志。
有谁是 logback/spring boot 方面的专家,可以为我指明正确的方向吗?
将 logback.xml 文件添加到项目的资源文件夹中。 Spring boot 将在启动时加载它,它将覆盖与 spring boot 捆绑的默认 logback 配置。
在您的 logback.xml 中,您可以定义自己的日志记录模式并删除不必要的数据。
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>
上面的示例不包含时间戳或日志模式中的线程。您可以更改它以适合您的特定用例。
更新
或者,您可以通过应用程序覆盖日志模式来实现此目的 属性。
用于控制台日志记录
logging.pattern.console=%-5level %logger{36} - %msg%n
用于文件记录
logging.pattern.file=%-5level %logger{36} - %msg%n
您可以在此处找到有关日志记录模式各部分含义的解释: https://logback.qos.ch/manual/layouts.html#conversionWord
最后,我没有找到在 spring 启动的 App Engine 标准中通过控制台打印机显示日志的正确方法。但是,通过使用 stackdriver api,日志确实更漂亮。
我所做的包括:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-logging</artifactId>
</dependency>
并且在 logback-spring.xml
<include resource="org/springframework/cloud/gcp/autoconfigure/logging/logback-appender.xml"/>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<springProfile name="local">
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
</springProfile>
<springProfile name="!local">
<root level="INFO">
<appender-ref ref="STACKDRIVER"/>
</root>
</springProfile>
然而,主请求日志级别不显示最高日志级别(但 "any log value")使得过滤更加困难。 另一方面,错误报告起作用是因为内部日志设置了正确的级别。