Migrate from jackson to micronaut serde
This commit is contained in:
parent
071fcd969b
commit
cccca4bfff
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>
|
<version>${version.io.kokuwa.micronaut.logging}</version>
|
||||||
<scope>runtime</scope>
|
<scope>runtime</scope>
|
||||||
</dependency>
|
</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
|
## Features
|
||||||
|
|
4
pom.xml
4
pom.xml
|
@ -114,6 +114,10 @@
|
||||||
<artifactId>micronaut-security</artifactId>
|
<artifactId>micronaut-security</artifactId>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.micronaut.serde</groupId>
|
||||||
|
<artifactId>micronaut-serde-api</artifactId>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.micronaut.test</groupId>
|
<groupId>io.micronaut.test</groupId>
|
||||||
<artifactId>micronaut-test-junit5</artifactId>
|
<artifactId>micronaut-test-junit5</artifactId>
|
||||||
|
|
|
@ -9,4 +9,11 @@
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>@project.artifactId@-it-log-gcp-from-env</artifactId>
|
<artifactId>@project.artifactId@-it-log-gcp-from-env</artifactId>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.micronaut.serde</groupId>
|
||||||
|
<artifactId>micronaut-serde-jsonp</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -9,4 +9,11 @@
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>@project.artifactId@-it-log-gcp-from-gcloud</artifactId>
|
<artifactId>@project.artifactId@-it-log-gcp-from-gcloud</artifactId>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.micronaut.serde</groupId>
|
||||||
|
<artifactId>micronaut-serde-jsonp</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -9,4 +9,11 @@
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>@project.artifactId@-it-log-gcp-with-service</artifactId>
|
<artifactId>@project.artifactId@-it-log-gcp-with-service</artifactId>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.micronaut.serde</groupId>
|
||||||
|
<artifactId>micronaut-serde-jsonp</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
</project>
|
</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>
|
<version>LOCAL-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>@project.artifactId@-it-log-json-from-env</artifactId>
|
<artifactId>@project.artifactId@-it-log-json-from-env-serde-missing</artifactId>
|
||||||
</project>
|
</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>
|
</parent>
|
||||||
|
|
||||||
<artifactId>@project.artifactId@-it-log-json-from-kubernetes</artifactId>
|
<artifactId>@project.artifactId@-it-log-json-from-kubernetes</artifactId>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.micronaut.serde</groupId>
|
||||||
|
<artifactId>micronaut-serde-jsonp</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -1,20 +1,23 @@
|
||||||
package io.kokuwa.micronaut.logging.layout;
|
package io.kokuwa.micronaut.logging.layout;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.TimeZone;
|
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.ThrowableHandlingConverter;
|
||||||
import ch.qos.logback.classic.pattern.ThrowableProxyConverter;
|
import ch.qos.logback.classic.pattern.ThrowableProxyConverter;
|
||||||
import ch.qos.logback.classic.spi.ILoggingEvent;
|
import ch.qos.logback.classic.spi.ILoggingEvent;
|
||||||
import ch.qos.logback.core.CoreConstants;
|
import ch.qos.logback.core.CoreConstants;
|
||||||
import ch.qos.logback.core.LayoutBase;
|
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.http.MediaType;
|
||||||
|
import io.micronaut.json.JsonMapper;
|
||||||
|
|
||||||
public class JsonLayout extends LayoutBase<ILoggingEvent> {
|
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 EXCEPTION_ATTR_NAME = "exception";
|
||||||
public static final String CONTEXT_ATTR_NAME = "context";
|
public static final String CONTEXT_ATTR_NAME = "context";
|
||||||
|
|
||||||
private final ObjectMapper mapper = new ObjectMapper();
|
|
||||||
|
|
||||||
protected boolean includeLevel = true;
|
protected boolean includeLevel = true;
|
||||||
protected boolean includeThreadName = true;
|
protected boolean includeThreadName = true;
|
||||||
protected boolean includeMDC = true;
|
protected boolean includeMDC = true;
|
||||||
|
@ -42,6 +43,7 @@ public class JsonLayout extends LayoutBase<ILoggingEvent> {
|
||||||
private String timestampFormat;
|
private String timestampFormat;
|
||||||
private String timestampFormatTimezoneId;
|
private String timestampFormatTimezoneId;
|
||||||
private ThrowableHandlingConverter throwableHandlingConverter = new ThrowableProxyConverter();
|
private ThrowableHandlingConverter throwableHandlingConverter = new ThrowableProxyConverter();
|
||||||
|
private JsonMapper mapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getContentType() {
|
public String getContentType() {
|
||||||
|
@ -63,9 +65,22 @@ public class JsonLayout extends LayoutBase<ILoggingEvent> {
|
||||||
@Override
|
@Override
|
||||||
public String doLayout(ILoggingEvent event) {
|
public String doLayout(ILoggingEvent event) {
|
||||||
var map = toJsonMap(event);
|
var map = toJsonMap(event);
|
||||||
|
|
||||||
|
if (mapper == null) {
|
||||||
try {
|
try {
|
||||||
return mapper.writeValueAsString(map) + CoreConstants.LINE_SEPARATOR;
|
mapper = JsonMapper.createDefault();
|
||||||
} catch (JsonProcessingException e) {
|
} 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 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);
|
addError("Failed to write json from event " + event + " and map " + map, e);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue