Java log4j2新对象消息AsJSonObject问题

Java log4j2新对象消息AsJSonObject问题,java,json,logging,log4j2,spring-webflux,Java,Json,Logging,Log4j2,Spring Webflux,我在这个配置中遇到了一个问题,我正在尝试确定错误是否来自json序列化(使用lombok和jackson)、与库的兼容性或其他方面。 我试图在消息字段中用log4j2将一个自定义对象写为json,我读到objectMessageAsJsonObject将帮助我,这是我的logj2.xml <Configuration status="INFO"> <Appenders> <Console name="Consol

我在这个配置中遇到了一个问题,我正在尝试确定错误是否来自json序列化(使用lombokjackson)、与库的兼容性或其他方面。 我试图在消息字段中用log4j2将一个自定义对象写为json,我读到objectMessageAsJsonObject将帮助我,这是我的logj2.xml

<Configuration status="INFO">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <JSONLayout properties="true" compact="true" eventEol="true" objectMessageAsJsonObject="true">
                <KeyValuePair key="guid" value="${ctx:guid}"/>
                <KeyValuePair key="ip" value="${ctx:x-forwarded-for}"/>
                <KeyValuePair key="user-agent" value="${ctx:user-agent}"/>
                <KeyValuePair key="host" value="${ctx:host}"/>
            </JSONLayout>
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="com" level="debug">
            <AppenderRef ref="Console"/>
        </Logger>
        <Root level="info">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>
我的pom依赖项

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
<properties>
<spring-cloud.version>Hoxton.SR8</spring-cloud.version>
</properties>
 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-sleuth</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
预期结果

{"instant":{"epochSecond":1603722213,"nanoOfSecond":172284000},"thread":"reactor-http-nio-3","level":"DEBUG","loggerName":"com.reactive.aspect.LoggableAspect","message":"{custom object as json}","endOfBatch":false,"loggerFqcn":"org.apache.logging.log4j.spi.AbstractLogger","contextMap":{"X-B3-SpanId":"aadb80928473e529","X-B3-TraceId":"5f96dbe1d99a094aaadb80928473e529","X-Span-Export":"true","host":"localhost:8080","spanExportable":"true","spanId":"aadb80928473e529","traceId":"5f96dbe1d99a094aaadb80928473e529","user-agent":"PostmanRuntime/7.26.5"},"threadId":28,"threadPriority":5,"guid":"${ctx:guid}","ip":"${ctx:x-forwarded-for}","user-agent":"PostmanRuntime/7.26.5","host":"localhost:8080"}
我试图写日志的方式是通过方法的一个方面

@Around("@annotation(loggable)")
  public Object logMethodEntryExit(ProceedingJoinPoint pjp, Loggable loggable) throws Throwable {
    long start = System.currentTimeMillis();
    String className = pjp.getSignature().getDeclaringTypeName();
    String methodName = pjp.getSignature().getName();
    Object information = pjp.getArgs();
    log.debug(EventLog.builder()
        .method(methodName)
        .service(className)
        .elapsedTime(start)
        .information(information)
        .eventType(REQUEST.name())
        .level(loggable.level().name())
        .build());

    Mono<Object> result = (Mono<Object>) pjp.proceed();
    long elapsedTime = System.currentTimeMillis() - start;
    return result.doOnNext(element -> log.debug(EventLog.builder()
        .method(methodName)
        .service(className)
        .elapsedTime(elapsedTime)
        .information(element)
        .eventType(RESPONSE.name())
        .level(loggable.level().name())
        .build()));
  }
周围(“@注释(可记录)”) 公共对象logMethodEntryExit(ProceedingJoinPoint pjp,Loggable Loggable)抛出Throwable{ 长启动=System.currentTimeMillis(); 字符串className=pjp.getSignature().getDeclaringTypeName(); String methodName=pjp.getSignature().getName(); 对象信息=pjp.getArgs(); 调试(EventLog.builder() .method(methodName) .服务(类名) .elapsedTime(开始) .信息(信息) .eventType(REQUEST.name()) .level(loggable.level().name()) .build()); Mono结果=(Mono)pjp.procedure(); long elapsedTime=System.currentTimeMillis()-开始; 返回result.doOnNext(element->log.debug(EventLog.builder()) .method(methodName) .服务(类名) .elapsedTime(elapsedTime) .信息(要素) .eventType(RESPONSE.name()) .level(loggable.level().name()) .build()); }
json从未显示过,请对此提供一点帮助。在类似设置中遇到类似问题-将org.springframework.cloud降级到Hoxton.SR6(并将org.springframework.boot升级到2.3.0.RELEASE)解决了它。

在类似设置中遇到类似问题-将org.springframework.cloud降级到Hoxton.SR6(和org.springframework.boot至2.3.0.RELEASE)解决了。

感谢您的回答,但降级这些依赖项时遇到了相同的问题。尝试了org.springframework.boot和2020.0.1 org.springframework.cloud的2.4.2版本,但仍然不起作用。感谢您的回答,但降级这些依赖项时遇到了相同的问题。尝试了org.springframework.boot和2020.0.1或更高版本的2.4.2版本g、 springframework.cloud仍然不起作用
{"instant":{"epochSecond":1603722213,"nanoOfSecond":172284000},"thread":"reactor-http-nio-3","level":"DEBUG","loggerName":"com.reactive.aspect.LoggableAspect","message":"{custom object as json}","endOfBatch":false,"loggerFqcn":"org.apache.logging.log4j.spi.AbstractLogger","contextMap":{"X-B3-SpanId":"aadb80928473e529","X-B3-TraceId":"5f96dbe1d99a094aaadb80928473e529","X-Span-Export":"true","host":"localhost:8080","spanExportable":"true","spanId":"aadb80928473e529","traceId":"5f96dbe1d99a094aaadb80928473e529","user-agent":"PostmanRuntime/7.26.5"},"threadId":28,"threadPriority":5,"guid":"${ctx:guid}","ip":"${ctx:x-forwarded-for}","user-agent":"PostmanRuntime/7.26.5","host":"localhost:8080"}
@Around("@annotation(loggable)")
  public Object logMethodEntryExit(ProceedingJoinPoint pjp, Loggable loggable) throws Throwable {
    long start = System.currentTimeMillis();
    String className = pjp.getSignature().getDeclaringTypeName();
    String methodName = pjp.getSignature().getName();
    Object information = pjp.getArgs();
    log.debug(EventLog.builder()
        .method(methodName)
        .service(className)
        .elapsedTime(start)
        .information(information)
        .eventType(REQUEST.name())
        .level(loggable.level().name())
        .build());

    Mono<Object> result = (Mono<Object>) pjp.proceed();
    long elapsedTime = System.currentTimeMillis() - start;
    return result.doOnNext(element -> log.debug(EventLog.builder()
        .method(methodName)
        .service(className)
        .elapsedTime(elapsedTime)
        .information(element)
        .eventType(RESPONSE.name())
        .level(loggable.level().name())
        .build()));
  }