http-headers - 如何添加 HTTP 标头 Logback Logstash
问题描述
我通读了以下文档,但无法弄清楚我需要什么其他配置:https ://github.com/logstash/logstash-logback-encoder#header-fields
我的配置文件:
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<customFields>{"app_name":"${APP_NAME:-N/A}","app_version":"${APP_VERSION:-N/A}","hostname":"${HOST:-N/A}","environment":"${environment:-${ENVIRONMENT:-N/A}}"}</customFields>
<includeContext>false</includeContext>
<timeZone>UTC</timeZone>
</encoder>
<encoder class="net.logstash.logback.encoder.LogstashAccessEncoder">
<fieldNames>
<requestHeaders>request_headers</requestHeaders>
</fieldNames>
</encoder>
<file>${LOG_FILE}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE_ROTATION:-${LOG_FILE}%d{yyyy-MM-dd}.%i}</fileNamePattern>
<maxHistory>${LOG_FILE_ROTATION_MAX_HISTORY:-1}</maxHistory>
<totalSizeCap>${LOG_FILE_ROTATION_TOTAL_SIZE_CAP:-3GB}</totalSizeCap>
<maxFileSize>${LOG_FILE_ROTATION_MAX_FILE_SIZE:-1GB}</maxFileSize>
</rollingPolicy>
</appender>
<root level="${LOG_LEVEL:-INFO}">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>
错误:
java.lang.IllegalStateException: Logback configuration error detected:
ERROR in ch.qos.logback.core.joran.spi.Interpreter@19:29 - no applicable action for [requestHeaders], current ElementPath is [[configuration][appender][encoder][fieldNames][requestHeaders]]
解决方案
您提供的 xml 配置文件似乎适用于logback-classic(因为它包括<root level=...
)。
通过 logstash-logback-encoder 自动记录请求标头仅适用于 IAccessEvent
通过logback-access记录的 s 。
换句话说,请求标头的自动记录对于通过from logback-classic记录的 s不可用。但是,您可以在使用 logback-classic 时手动包含它们,如下所述。ILoggingEvent
Logger
使用 logback-access 记录请求标头
要记录通过 logback-access 记录的 s 的请求标头IAccessEvent
,请按照为 tomcat 或 jetty 设置 logback-access 的说明进行操作,并将以下内容添加到您的logback-access.xml
. (注意这不是logback.xml
logback-classic 使用的文件)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LogstashAccessEncoder">
<fieldNames>
<requestHeaders>request_headers</requestHeaders>
</fieldNames>
</encoder>
</appender>
<appender-ref ref="console"/>
</configuration>
此配置已使用 logstash-logback-encoder 5.3 进行了测试。请注意,xml 元素名称在 5.0 之前的 logstash-logback-encoder 版本中是不同的,因此请确保您使用 5.0+ 和该配置。
使用 logback-classic 记录请求标头
logstash-logback-encoder 不为通过 logback-classic 记录请求标头提供一流的支持。Logger
但是,您可以将它们包含在通过使用特定于事件的自定义字段记录的日志事件中。
例如,在可以访问 http 请求的类(例如 servlet 过滤器)中,您可以执行以下操作:
Map<String, String> httpHeadersMap = ...; // get http request headers as a map
LOGGER.info("request", StructuredArguments.entries(httpHeadersMap));
LogbackEncoder
并像这样配置一个logback.xml
:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
<root level="info">
<appender-ref ref="console" />
</root>
</configuration>
推荐阅读
- java - 如何获取当前 OnClick 行的索引?
- c# - C# Byte[] 在 4gb 文件中搜索数组偏移量
- python - 使用 matplotlib 标记图的局部最小值/最大值
- python - Django模型查询“匹配查询不存在”
- reactjs - TypeScript React - 通过 ref 访问视频元素并调用 .play()
- bokeh - 散景中从左到右的流动图
- java - 编写一个程序,使用 `replace` 方法在一个字符串中交换字母“e”和“o”
- gcc - 为什么编译我的代码时 gcc-8.2 崩溃
- vue.js - Vue CLI v3 - 它如何知道应该将哪些 JS 文件分块在不同的文件中
- performance - 为什么我的随机 SVD 实现使用这么多内存?