Description
Describe the bug
Whenever I use Markers.appendFields()
:
- 🟢 the fields of the given POJO are well sent to the logstash backend as new entries in the JSON root payload
- 🔴 but what is displayed in the console thru a
net.logstash.logback.appender.LogstashAccessTcpSocketAppender
is simply the POJO instance reference ... not even it'stoString
version 😋
Is it a Markers.appendFields
related trouble, or a ch.qos.logback.classic.PatternLayout
related trouble ?
From my point of view I would expect Markers.appendFields
building a data structure that would be compatible with both appenders.
To Reproduce
Steps to reproduce the behavior:
- Use this
logback.xml
configuration :
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%marker</Pattern>
</layout>
</appender>
<springProperty name="logstash-url" source="custom.logstash.url"/>
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashAccessTcpSocketAppender">
<destination>${logstash-url}</destination>
<encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
<root level="DEBUG">
<appender-ref ref="Console"/>
<appender-ref ref="LOGSTASH"/>
</root>
</configuration>
- Execute this code :
public class MyPojo {
public static void main(String[] args) {
MyPojo pojoInstance = new MyPojo();
log.debug(
Markers.appendFields( pojoInstance ),
"who cares, only markers are displayed on the console appender :)"
);
}
final String innerField = "test";
public String getInnerField() {
return innerField;
}
@Override
public String toString() {
return "MyPojo{" +
"innerField='" + innerField + '\'' +
'}';
}
}
- The output on the console is something like that :
MyPojo@91ca23d
Expected behavior
I'm expecting the object fields been displayed in the console instead of there parent object reference, so at best, something like that :
innerField: "test"
Or at least, it's toString representation, but in that case it wouldn't fit well if something got appended to the marker instance returned from Markers.appendFields()
, either by using .and()
, .add()
or Markers.aggregate()
- what output did you expect
innerField: "test"
Additional context
-
java version : openjdk-11.0.2.jdk
-
logstash-logback-encoder version :
~/.m2/repository/net/logstash/logback/logstash-logback-encoder/6.6/logstash-logback-encoder-6.6.jar -
logback version :
~/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar
~/.m2/repository/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar -
jackson version :
~/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.11.4/jackson-datatype-jdk8-2.11.4.jar
~/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.4/jackson-datatype-jsr310-2.11.4.jar
~/.m2/repository/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar
~/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.11.4/jackson-databind-2.11.4.jar
~/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.11.4/jackson-annotations-2.11.4.jar
~/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.11.4/jackson-core-2.11.4.jar -
extra log related dependencies :
~/.m2/repository/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar
~/.m2/repository/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar
~/.m2/repository/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar
~/.m2/repository/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar
~/.m2/repository/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30.jar