当我在 spring boot 应用程序中启用 ssl 握手日志时,每个 system.out.println 都被记录为 graylog 中的单个条目。我正在寻找一种将多行保持在一起的 Java 解决方案。
javax.net.ssl|DEBUG|EF|http-nio-auto-1-exec-5|2023-03-31 10:28:37.444 CEST|SSLExtensions.java:272|Ignore, context unavailable extension: renegotiation_info
javax.net.ssl|DEBUG|EF|http-nio-auto-1-exec-5|2023-03-31 10:28:37.445 CEST|ClientHello.java:641|Produced ClientHello handshake message (
"ClientHello": {
"client version" : "TLSv1.2",
"random" : "19F2B67470FA4E573D50B452679D7F794D527517E",
"session id" : "0A68F7268E1A29EA4F1AEC6943453D31C9EA02EEC8",
"cipher suites" : "[TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384(0xC02C), TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256(0xC02B), TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256(0xCCA9), TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384(0xC030),
只有 javax.net.ssl.... 行应该在 graylog 中记录为单个条目。
我想知道 log4j appender 或 PrintStream(可以分配给 System.setOut(...))是否已经存在,其中可以定义模式,哪些行应该放在一起? Filebeat 是一个选项 (https://www.elastic.co/guide/en/beats/filebeat/current/multiline-examples.html) 但更喜欢可以在 spring boot 应用程序中配置的解决方案。 Logstash 未在使用中。
为了从 Oracle 的 SSL 实现中捕获调试消息,您需要:
System.out
,从 Java 8 开始,如果将
javax.net.debug
变量设置为 空 字符串,SunJSSE 可以使用适当的日志记录 API,例如与-Djavax.net.debug=
。实际的日志 API 取决于 Java 版本:
java.util.logging
。您需要log4j-jul
将其转发到 Log4j 2.x API,System.Logger
。您需要 log4j-jpl
将其转发到 Log4j 2.x API。或者 System.Logger
默认绑定到 java.util.logging
.要轻松地将 SunJSSE 日志导入 Graylog,您可能需要使用 GELF 布局。您的
log4j2-spring.xml
文件将如下所示:
<Configuration name="app" status="WARN">
<Appenders>
<File name="FILE" fileName="${sys:LOG_FILE}">
<JsonTemplateLayout eventTemplateUri="classpath:GelfLayout.json"/>
</File>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="FILE"/>
</Root>
<Logger name="javax.net.ssl" level="DEBUG"/>
</Loggers>
</Configuration>
log4j-layout-json-template
)。
或者您可以使用 RFC5424 布局 并转义新行:
<Configuration name="app" status="WARN">
<Appenders>
<File name="FILE" fileName="${sys:LOG_FILE}">
<Rfc5424Layout newLine="true" newLineEscape=" "/>
</File>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="FILE"/>
</Root>
<Logger name="javax.net.ssl" level="DEBUG"/>
</Loggers>
</Configuration>