【发布时间】:2021-02-08 20:07:43
【问题描述】:
我遇到了此配置的问题,我正在尝试确定错误是否来自 json 序列化(使用 lombok 和 jackson)、与库的兼容性或别的东西。 我正在尝试在 message 字段中使用 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>
这是我的自定义对象
@Builder
@AllArgsConstructor
public class EventLog {
private String service;
private String method;
private String event;
private String eventType;
private String level;
private Object information;
private Long elapsedTime;
private String sessionId;
private String identification;
private String code;
private String message;
}
我的 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":"EventLog(service=com.controllers.ControlListController, method=verifyControlList, event=null, eventType=REQUEST, level=LEVEL_001, information=[Ljava.lang.Object;@5fa99897, elapsedTime=1603722209217, sessionId=null, identification=null, code=null, message=null)","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"}
预期结果
{"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()));
}
而且 json 从未显示,请对此有所帮助
【问题讨论】:
标签: java json logging log4j2 spring-webflux