当我在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未使用。
1条答案
按热度按时间7fhtutme1#
要从Oracle的SSL实现捕获调试消息,您需要:
1.将其配置为使用适当的日志API而不是
System.out
,1.使用允许多行消息的日志记录布局。
重定向SunJSEE调试
从Java 8开始,如果你将
javax.net.debug
变量设置为一个空字符串,例如使用-Djavax.net.debug=
,SunJSSE可以使用一个正确的日志API。实际的日志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
文件看起来像这样:(you
log4j-layout-json-template
)。或者,您可以使用RFC5424布局并转义新行: