Skip to content

Commit b9440f6

Browse files
committed
initial commit
1 parent 5056aa6 commit b9440f6

13 files changed

+2155
-0
lines changed

.github/workflows/build.yml

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
name: Build
2+
3+
on: [push, pull_request, workflow_dispatch]
4+
5+
jobs:
6+
build:
7+
8+
runs-on: ${{ matrix.os }}
9+
permissions:
10+
contents: read
11+
packages: write
12+
strategy:
13+
fail-fast: false
14+
matrix:
15+
java_version: [11,17,20]
16+
os: [ubuntu-latest]
17+
18+
steps:
19+
- uses: actions/checkout@v3
20+
- name: Set up Java
21+
uses: actions/setup-java@v3
22+
with:
23+
java-version: ${{ matrix.java_version }}
24+
distribution: 'zulu'
25+
- name: Maven cache
26+
uses: actions/cache@v3
27+
env:
28+
cache-name: maven-cache
29+
with:
30+
path:
31+
~/.m2
32+
key: build-${{ env.cache-name }}
33+
- name: Maven version
34+
run: mvn --version
35+
- name: Build with Maven
36+
run: mvn clean test

.github/workflows/jdk-ea.yml

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
2+
name: JDK EA
3+
4+
on:
5+
workflow_dispatch:
6+
schedule:
7+
- cron: '39 6 * * 1,3,5'
8+
9+
jobs:
10+
build:
11+
12+
runs-on: ${{ matrix.os }}
13+
permissions:
14+
contents: read
15+
packages: write
16+
strategy:
17+
fail-fast: false
18+
matrix:
19+
java_version: [GA,EA] ## valhalla,metropolis don't support java 17
20+
os: [ubuntu-latest]
21+
22+
steps:
23+
- uses: actions/checkout@v3
24+
- name: Set up Java
25+
uses: oracle-actions/setup-java@v1
26+
with:
27+
website: jdk.java.net
28+
release: ${{ matrix.java_version }}
29+
- name: Maven cache
30+
uses: actions/cache@v3
31+
env:
32+
cache-name: maven-cache
33+
with:
34+
path:
35+
~/.m2
36+
key: build-${{ env.cache-name }}
37+
- name: Maven version
38+
run: mvn --version
39+
- name: Build with Maven
40+
run: mvn package
41+

.gitignore

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
target/
2+
build/
3+
.idea/
4+
*.iml
5+
.gradle
6+
*.prefs
7+
*.classpath
8+
*.project
9+
*.class
10+
.DS_Store

pom.xml

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
<parent>
7+
<groupId>org.avaje</groupId>
8+
<artifactId>java11-oss</artifactId>
9+
<version>3.10</version>
10+
</parent>
11+
12+
<artifactId>avaje-logback-encoder</artifactId>
13+
14+
<dependencies>
15+
<dependency>
16+
<groupId>org.slf4j</groupId>
17+
<artifactId>slf4j-jdk-platform-logging</artifactId>
18+
<version>2.0.9</version>
19+
</dependency>
20+
<dependency>
21+
<groupId>ch.qos.logback</groupId>
22+
<artifactId>logback-classic</artifactId>
23+
<version>1.4.8</version>
24+
</dependency>
25+
<dependency>
26+
<groupId>io.avaje</groupId>
27+
<artifactId>avaje-jsonb</artifactId>
28+
<version>1.8-RC3</version>
29+
</dependency>
30+
<dependency>
31+
<groupId>io.avaje</groupId>
32+
<artifactId>junit</artifactId>
33+
<version>1.1</version>
34+
<scope>test</scope>
35+
</dependency>
36+
</dependencies>
37+
</project>
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package io.avaje.logback;
2+
3+
import java.io.ByteArrayOutputStream;
4+
import java.time.Instant;
5+
6+
import ch.qos.logback.classic.pattern.ThrowableHandlingConverter;
7+
import ch.qos.logback.classic.spi.ILoggingEvent;
8+
import ch.qos.logback.core.encoder.EncoderBase;
9+
import io.avaje.jsonb.JsonWriter;
10+
import io.avaje.jsonb.spi.PropertyNames;
11+
import io.avaje.jsonb.stream.JsonStream;
12+
import io.avaje.logback.abbreviator.TrimPackageAbbreviator;
13+
14+
public final class JsonbEncoder extends EncoderBase<ILoggingEvent> {
15+
16+
private static final byte[] EMPTY_BYTES = {};
17+
private final PropertyNames properties;
18+
private final JsonStream json;
19+
20+
private final ThrowableHandlingConverter throwableConverter;
21+
22+
public JsonbEncoder() {
23+
this.json = JsonStream.builder().build();
24+
this.properties =
25+
json.properties("@timestamp", "level", "logger", "message", "thread", "stack_trace");
26+
27+
final var converter = new ShortenedThrowableConverter();
28+
converter.setMaxDepthPerThrowable(3);
29+
30+
final var de = new TrimPackageAbbreviator();
31+
de.setTargetLength(20);
32+
converter.setClassNameAbbreviator(de);
33+
converter.setRootCauseFirst(true);
34+
throwableConverter = converter; // new ExtendedThrowableProxyConverter(); // converter
35+
}
36+
37+
@Override
38+
public void start() {
39+
super.start();
40+
throwableConverter.start();
41+
}
42+
43+
@Override
44+
public void stop() {
45+
super.stop();
46+
throwableConverter.stop();
47+
}
48+
49+
@Override
50+
public byte[] headerBytes() {
51+
return EMPTY_BYTES;
52+
}
53+
54+
@Override
55+
public byte[] footerBytes() {
56+
return EMPTY_BYTES;
57+
}
58+
59+
@Override
60+
public byte[] encode(ILoggingEvent event) {
61+
final String stackTraceBody = throwableConverter.convert(event);
62+
final int extra = stackTraceBody.isEmpty() ? 0 : 20 + stackTraceBody.length();
63+
64+
final var threadName = event.getThreadName();
65+
final var message = event.getFormattedMessage();
66+
final var loggerName = event.getLoggerName();
67+
final int bufferSize =
68+
100 + extra + message.length() + threadName.length() + loggerName.length();
69+
final var outputStream = new ByteArrayOutputStream(bufferSize);
70+
71+
final Instant instant = Instant.ofEpochMilli(event.getTimeStamp());
72+
try (JsonWriter writer = json.writer(outputStream)) {
73+
writer.beginObject(properties);
74+
writer.name(0);
75+
writer.rawValue(instant.toString());
76+
writer.name(1);
77+
writer.rawValue(event.getLevel().toString());
78+
writer.name(2);
79+
writer.value(loggerName);
80+
writer.name(3);
81+
writer.value(message);
82+
writer.name(4);
83+
writer.value(threadName);
84+
85+
if (!stackTraceBody.isEmpty()) {
86+
writer.name(5);
87+
writer.value(stackTraceBody);
88+
}
89+
event
90+
.getMDCPropertyMap()
91+
.forEach(
92+
(k, v) -> {
93+
writer.name(k);
94+
writer.value(v);
95+
});
96+
writer.endObject();
97+
writer.writeNewLine();
98+
}
99+
100+
return outputStream.toByteArray();
101+
}
102+
}

0 commit comments

Comments
 (0)