在Spring Boot应用程序中同时登录文本和JSON格式



我有一个Spring Boot应用程序,对于日志,我们使用Logback库。根据项目要求,有必要以JSON格式添加日志,以便可以获得指标。此日志必须添加到现有日志中,并将以相同的方法和相同的级别使用,但将记录其他信息。

这种情况是如何处理的?为了清晰起见,我添加了一个示例:

public class UserService {

private final Logger logger = LoggerFactory.getLogger(UserService.class);
public UserResponse getUser(UserRequest userRequest) {
User user = userRepository.findById(userRequest.getId());
//text log
logger.info("User " + user.getFullName().toString() + " found");
//json log to add
LogInfo logInfo = new LogInfo(LocalDateTime.now(), getClass().getName(), user.getName(), user.getSurname(), ...);
newLogger.info(logInfo);

return new UserResponse(user);
}
}

添加依赖项

<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.6</version>
</dependency>
<dependency>
<groupId>ch.qos.logback.contrib</groupId>
<artifactId>logback-json-classic</artifactId>
<version>0.1.5</version>
</dependency>
<dependency>
<groupId>ch.qos.logback.contrib</groupId>
<artifactId>logback-jackson</artifactId>
<version>0.1.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.3</version>
</dependency>
</dependencies>

添加文件logback.xml有内容

<appender name="json" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
<jsonFormatter
class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
<prettyPrint>true</prettyPrint>
</jsonFormatter>
<timestampFormat>yyyy-MM-dd' 'HH:mm:ss.SSS</timestampFormat>
</layout>
</appender>
<logger name="jsonLogger" level="TRACE">
<appender-ref ref="json" />
</logger>

调用日志记录器

Logger logger = LoggerFactory.getLogger("jsonLogger");
logger.debug("Debug/INFO/ERROR message");

您将需要正确配置logback插件添加业务所需的模板,您可以从:https://mathieularose.com/logback-json

如果希望将所有消息记录为JSON,请在logback.xml

中使用以下命令
<logger name="ROOT" level="${logging.level.root}">
<appender-ref ref="json"/>
</logger>

ROOT appender将所有日志写入JSON,级别可以从应用程序配置中配置

相关内容

最新更新