Migrate from jackson to micronaut serde
This commit is contained in:
parent
c1f63ff146
commit
41eb8e911c
17 changed files with 144 additions and 18 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>
|
||||||
```
|
```
|
||||||
|
|
||||||
Or use in `dependencyManagement` in `pom.xml`:
|
Or use in `dependencyManagement` in `pom.xml`:
|
||||||
|
|
21
pom.xml
21
pom.xml
|
@ -101,10 +101,10 @@
|
||||||
<!-- dependencies -->
|
<!-- dependencies -->
|
||||||
|
|
||||||
<version.ch.qos.logback>1.4.7</version.ch.qos.logback>
|
<version.ch.qos.logback>1.4.7</version.ch.qos.logback>
|
||||||
<version.com.fasterxml.jackson>2.15.0</version.com.fasterxml.jackson>
|
|
||||||
<version.io.kokuwa.micronaut.logging>4.0.0-SNAPSHOT</version.io.kokuwa.micronaut.logging>
|
<version.io.kokuwa.micronaut.logging>4.0.0-SNAPSHOT</version.io.kokuwa.micronaut.logging>
|
||||||
<version.io.micronaut>4.0.0-M3</version.io.micronaut>
|
<version.io.micronaut>4.0.0-M3</version.io.micronaut>
|
||||||
<version.io.micronaut.security>4.0.0-M3</version.io.micronaut.security>
|
<version.io.micronaut.security>4.0.0-M3</version.io.micronaut.security>
|
||||||
|
<version.io.micronaut.serde>2.0.0-M6</version.io.micronaut.serde>
|
||||||
<version.org.slf4j.api>2.0.7</version.org.slf4j.api>
|
<version.org.slf4j.api>2.0.7</version.org.slf4j.api>
|
||||||
<version.org.yaml.snakeyaml>2.0</version.org.yaml.snakeyaml>
|
<version.org.yaml.snakeyaml>2.0</version.org.yaml.snakeyaml>
|
||||||
|
|
||||||
|
@ -138,11 +138,6 @@
|
||||||
<artifactId>logback-core</artifactId>
|
<artifactId>logback-core</artifactId>
|
||||||
<version>${version.ch.qos.logback}</version>
|
<version>${version.ch.qos.logback}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
|
||||||
<artifactId>jackson-databind</artifactId>
|
|
||||||
<version>${version.com.fasterxml.jackson}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</dependencyManagement>
|
</dependencyManagement>
|
||||||
|
@ -185,6 +180,11 @@
|
||||||
</exclusion>
|
</exclusion>
|
||||||
</exclusions>
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.micronaut.serde</groupId>
|
||||||
|
<artifactId>micronaut-serde-api</artifactId>
|
||||||
|
<version>${version.io.micronaut.serde}</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.micronaut.test</groupId>
|
<groupId>io.micronaut.test</groupId>
|
||||||
<artifactId>micronaut-test-junit5</artifactId>
|
<artifactId>micronaut-test-junit5</artifactId>
|
||||||
|
@ -221,10 +221,6 @@
|
||||||
<groupId>ch.qos.logback</groupId>
|
<groupId>ch.qos.logback</groupId>
|
||||||
<artifactId>logback-classic</artifactId>
|
<artifactId>logback-classic</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
|
||||||
<artifactId>jackson-databind</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
@ -271,6 +267,11 @@
|
||||||
<artifactId>micronaut-inject-java</artifactId>
|
<artifactId>micronaut-inject-java</artifactId>
|
||||||
<version>${version.io.micronaut}</version>
|
<version>${version.io.micronaut}</version>
|
||||||
</path>
|
</path>
|
||||||
|
<path>
|
||||||
|
<groupId>io.micronaut.serde</groupId>
|
||||||
|
<artifactId>micronaut-serde-processor</artifactId>
|
||||||
|
<version>${version.io.micronaut.serde}</version>
|
||||||
|
</path>
|
||||||
</annotationProcessorPaths>
|
</annotationProcessorPaths>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
|
|
@ -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-serde-jackson</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>
|
||||||
|
|
|
@ -49,6 +49,7 @@
|
||||||
|
|
||||||
<version.io.kokuwa.micronaut.logging>@version.io.kokuwa.micronaut.logging@</version.io.kokuwa.micronaut.logging>
|
<version.io.kokuwa.micronaut.logging>@version.io.kokuwa.micronaut.logging@</version.io.kokuwa.micronaut.logging>
|
||||||
<version.io.micronaut>@version.io.micronaut@</version.io.micronaut>
|
<version.io.micronaut>@version.io.micronaut@</version.io.micronaut>
|
||||||
|
<version.io.micronaut.serde>@version.io.micronaut.serde@</version.io.micronaut.serde>
|
||||||
|
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
|
@ -81,6 +82,14 @@
|
||||||
<artifactId>micronaut-test-junit5</artifactId>
|
<artifactId>micronaut-test-junit5</artifactId>
|
||||||
<version>${version.io.micronaut}</version>
|
<version>${version.io.micronaut}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.micronaut.serde</groupId>
|
||||||
|
<artifactId>micronaut-serde-bom</artifactId>
|
||||||
|
<version>${version.io.micronaut.serde}</version>
|
||||||
|
<type>pom</type>
|
||||||
|
<scope>import</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</dependencyManagement>
|
</dependencyManagement>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
|
@ -1,20 +1,24 @@
|
||||||
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.context.exceptions.NoSuchBeanException;
|
||||||
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 +32,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 +44,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 +66,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 {
|
||||||
|
mapper = JsonMapper.createDefault();
|
||||||
|
} catch (NoSuchBeanException 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 {
|
try {
|
||||||
return mapper.writeValueAsString(map) + CoreConstants.LINE_SEPARATOR;
|
return new String(mapper.writeValueAsBytes(map), StandardCharsets.UTF_8) + CoreConstants.LINE_SEPARATOR;
|
||||||
} catch (JsonProcessingException e) {
|
} 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