spring boot tomcat访问日志log4j2弹性通用架构

问题描述 投票:0回答:1

配置 Spring Boot 使用 log4j2 和 ECS 非常简单。我们需要做的就是在 pom.xml 中包含以下依赖项:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter</artifactId>
  <exclusions>
    <exclusion>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-logging</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
  <groupId>co.elastic.logging</groupId>
  <artifactId>log4j2-ecs-layout</artifactId>
  <version>1.0.1</version>
</dependency>

然后在 log4j2.xml 文件中我们只需要包含这样的内容:

<Console name="prod" target="SYSTEM_OUT">
  <EcsLayout serviceName="${service-name}" stackTraceAsArray="true" includeOrigin="true" includeMarkers="true" />
</Console>

但是,当我们配置 Spring Boot 将应用程序访问日志记录在 application.yml 中时,我们会这样做:

server:
  tomcat:
    accesslog:
      enabled: true
      encoding: UTF-8
      directory: /dev
      prefix: stdout
      buffered: false
      suffix:
      file-date-format:
      pattern: "ACCESS_LOG: %h %l %u \"%{yyyy-MM-dd HH:mm:ss.SSS}t\" \"%r\" status=%s size=%b \"user-agent=%{User-Agent}i\""

访问日志不会通过 EcsLayout 以 json 形式记录。

如何配置 Spring Boot 应用程序以使用弹性通用架构 (json) 格式将 tomcat 访问日志以 json 形式记录到控制台?

spring-boot tomcat log4j2 elastic-stack
1个回答
0
投票

log4j2 引入了 JsonTemplateLayout,它根据提供的 JSON 模板描述的结构对 LogEvents 进行编码。它们还支持 Elastic Common Schema (ECS) 布局(可通过 classpath:EcsLayout.json 访问)。您还可以使用此方法将自定义字段添加到输出中,如其文档中所示。

将依赖项添加到您的 pom.xml 文件中

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-layout-template-json</artifactId>
    <version>2.20.0</version>
</dependency>

如图所示配置log4j2.xml文件

<Console name="prod" target="SYSTEM_OUT">
  <JsonTemplateLayout eventTemplateUri="classpath:EcsLayout.json"/>
</Console>

现在您应该能够在控制台的 ECS 布局中看到 JSON 输出。

© www.soinside.com 2019 - 2024. All rights reserved.