Migrate from jackson to micronaut serde
This commit is contained in:
parent
d53a54b8c3
commit
c654786978
16 changed files with 127 additions and 8 deletions
|
@ -14,6 +14,12 @@ Include in your `pom.xml`:
|
|||
<version>${version.io.kokuwa.micronaut.logging}</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<!-- you can replace jsonp with jackson if you prefer jackson -->
|
||||
<groupId>io.micronaut.serde</groupId>
|
||||
<artifactId>micronaut-serde-jsonp</artifactId>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
## Features
|
||||
|
|
4
pom.xml
4
pom.xml
|
@ -114,6 +114,10 @@
|
|||
<artifactId>micronaut-security</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.micronaut.serde</groupId>
|
||||
<artifactId>micronaut-serde-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.micronaut.test</groupId>
|
||||
<artifactId>micronaut-test-junit5</artifactId>
|
||||
|
|
|
@ -9,4 +9,11 @@
|
|||
</parent>
|
||||
|
||||
<artifactId>@project.artifactId@-it-log-gcp-from-env</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>io.micronaut.serde</groupId>
|
||||
<artifactId>micronaut-serde-jsonp</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
|
@ -9,4 +9,11 @@
|
|||
</parent>
|
||||
|
||||
<artifactId>@project.artifactId@-it-log-gcp-from-gcloud</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>io.micronaut.serde</groupId>
|
||||
<artifactId>micronaut-serde-jsonp</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
|
@ -9,4 +9,11 @@
|
|||
</parent>
|
||||
|
||||
<artifactId>@project.artifactId@-it-log-gcp-with-service</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>io.micronaut.serde</groupId>
|
||||
<artifactId>micronaut-serde-jsonp</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
19
src/it/log-json-from-env-serde-jackson/pom.xml
Normal file
19
src/it/log-json-from-env-serde-jackson/pom.xml
Normal file
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>@project.groupId@</groupId>
|
||||
<artifactId>@project.artifactId@-it</artifactId>
|
||||
<version>LOCAL-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>@project.artifactId@-it-log-json-from-env-serde-jackson</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>io.micronaut.serde</groupId>
|
||||
<artifactId>micronaut-serde-jackson</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
1
src/it/log-json-from-env-serde-jsonp/invoker.properties
Normal file
1
src/it/log-json-from-env-serde-jsonp/invoker.properties
Normal file
|
@ -0,0 +1 @@
|
|||
invoker.environmentVariables.LOGBACK_APPENDER=JSON
|
19
src/it/log-json-from-env-serde-jsonp/pom.xml
Normal file
19
src/it/log-json-from-env-serde-jsonp/pom.xml
Normal file
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>@project.groupId@</groupId>
|
||||
<artifactId>@project.artifactId@-it</artifactId>
|
||||
<version>LOCAL-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>@project.artifactId@-it-log-json-from-env-serde-jsonp</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>io.micronaut.serde</groupId>
|
||||
<artifactId>micronaut-serde-jsonp</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
21
src/it/log-json-from-env-serde-jsonp/postbuild.bsh
Normal file
21
src/it/log-json-from-env-serde-jsonp/postbuild.bsh
Normal file
|
@ -0,0 +1,21 @@
|
|||
// verify log
|
||||
|
||||
String expected = "^\\{\"timestamp\":\"[0-9]{13}\",\"level\":\"INFO\",\"thread\":\"main\",\"logger\":\"io.kokuwa.micronaut.logging.LoggingTest\",\"message\":\"test-output-marker\",\"raw-message\":\"test-output-marker\"}$";
|
||||
String[] logs = org.codehaus.plexus.util.FileUtils.fileRead(basedir + "/build.log").split("\n");
|
||||
|
||||
for (String log : logs) {
|
||||
if (!log.contains("test-output-marker")) {
|
||||
continue;
|
||||
}
|
||||
if (java.util.regex.Pattern.matches(expected, log)) {
|
||||
return true;
|
||||
} else {
|
||||
System.out.println("marker found, but formatting invalid:");
|
||||
System.out.println("[EXPECTED] " + expected);
|
||||
System.out.println("[ACTUAL] " + log);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("marker not found");
|
||||
return false;
|
|
@ -0,0 +1 @@
|
|||
invoker.environmentVariables.LOGBACK_APPENDER=JSON
|
|
@ -8,5 +8,5 @@
|
|||
<version>LOCAL-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>@project.artifactId@-it-log-json-from-env</artifactId>
|
||||
<artifactId>@project.artifactId@-it-log-json-from-env-serde-missing</artifactId>
|
||||
</project>
|
5
src/it/log-json-from-env-serde-missing/postbuild.bsh
Normal file
5
src/it/log-json-from-env-serde-missing/postbuild.bsh
Normal file
|
@ -0,0 +1,5 @@
|
|||
// verify log
|
||||
|
||||
return org.codehaus.plexus.util.FileUtils
|
||||
.fileRead(basedir + "/build.log")
|
||||
.contains("Failed to get object mapper from micronaut, please check your classpath");
|
|
@ -9,4 +9,11 @@
|
|||
</parent>
|
||||
|
||||
<artifactId>@project.artifactId@-it-log-json-from-kubernetes</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>io.micronaut.serde</groupId>
|
||||
<artifactId>micronaut-serde-jsonp</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
|
@ -1,20 +1,23 @@
|
|||
package io.kokuwa.micronaut.logging.layout;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.TimeZone;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
import ch.qos.logback.classic.pattern.ThrowableHandlingConverter;
|
||||
import ch.qos.logback.classic.pattern.ThrowableProxyConverter;
|
||||
import ch.qos.logback.classic.spi.ILoggingEvent;
|
||||
import ch.qos.logback.core.CoreConstants;
|
||||
import ch.qos.logback.core.LayoutBase;
|
||||
import ch.qos.logback.core.status.OnConsoleStatusListener;
|
||||
import ch.qos.logback.core.status.StatusUtil;
|
||||
import ch.qos.logback.core.util.StatusListenerConfigHelper;
|
||||
import io.micronaut.http.MediaType;
|
||||
import io.micronaut.json.JsonMapper;
|
||||
|
||||
public class JsonLayout extends LayoutBase<ILoggingEvent> {
|
||||
|
||||
|
@ -28,8 +31,6 @@ public class JsonLayout extends LayoutBase<ILoggingEvent> {
|
|||
public static final String EXCEPTION_ATTR_NAME = "exception";
|
||||
public static final String CONTEXT_ATTR_NAME = "context";
|
||||
|
||||
private final ObjectMapper mapper = new ObjectMapper();
|
||||
|
||||
protected boolean includeLevel = true;
|
||||
protected boolean includeThreadName = true;
|
||||
protected boolean includeMDC = true;
|
||||
|
@ -42,6 +43,7 @@ public class JsonLayout extends LayoutBase<ILoggingEvent> {
|
|||
private String timestampFormat;
|
||||
private String timestampFormatTimezoneId;
|
||||
private ThrowableHandlingConverter throwableHandlingConverter = new ThrowableProxyConverter();
|
||||
private JsonMapper mapper;
|
||||
|
||||
@Override
|
||||
public String getContentType() {
|
||||
|
@ -63,9 +65,22 @@ public class JsonLayout extends LayoutBase<ILoggingEvent> {
|
|||
@Override
|
||||
public String doLayout(ILoggingEvent event) {
|
||||
var map = toJsonMap(event);
|
||||
|
||||
if (mapper == null) {
|
||||
try {
|
||||
mapper = JsonMapper.createDefault();
|
||||
} catch (IllegalStateException e) {
|
||||
if (!StatusUtil.contextHasStatusListener(context)) {
|
||||
addError("Failed to get object mapper from micronaut, please check your classpath");
|
||||
StatusListenerConfigHelper.addOnConsoleListenerInstance(context, new OnConsoleStatusListener());
|
||||
}
|
||||
return map.toString() + CoreConstants.LINE_SEPARATOR;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
return mapper.writeValueAsString(map) + CoreConstants.LINE_SEPARATOR;
|
||||
} catch (JsonProcessingException e) {
|
||||
return new String(mapper.writeValueAsBytes(map), StandardCharsets.UTF_8) + CoreConstants.LINE_SEPARATOR;
|
||||
} catch (IOException e) {
|
||||
addError("Failed to write json from event " + event + " and map " + map, e);
|
||||
return null;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue