Skip to content

Commit 60ec4e6

Browse files
committed
feat: add sdk logging helpers
1 parent 3d06ab7 commit 60ec4e6

File tree

4 files changed

+122
-0
lines changed

4 files changed

+122
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
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>com.google.api</groupId>
8+
<artifactId>java-sdk-logging</artifactId>
9+
<version>0.0.1-SNAPSHOT</version>
10+
</parent>
11+
<artifactId>logback-extension</artifactId>
12+
13+
<properties>
14+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
15+
<logback.version>1.2.13</logback.version>
16+
<logstash.encoder.version>7.3</logstash.encoder.version>
17+
</properties>
18+
19+
<dependencies>
20+
<dependency>
21+
<groupId>org.slf4j</groupId>
22+
<artifactId>slf4j-api</artifactId>
23+
<version>${slf4j.version}</version>
24+
</dependency>
25+
<dependency>
26+
<groupId>ch.qos.logback</groupId>
27+
<artifactId>logback-classic</artifactId>
28+
<version>${logback.version}</version>
29+
<optional>true</optional>
30+
</dependency>
31+
<dependency>
32+
<groupId>net.logstash.logback</groupId>
33+
<artifactId>logstash-logback-encoder</artifactId>
34+
<version>${logstash.encoder.version}</version>
35+
<optional>true</optional>
36+
</dependency>
37+
</dependencies>
38+
</project>
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package com.google.api.logging;
2+
3+
import ch.qos.logback.classic.spi.ILoggingEvent;
4+
import com.fasterxml.jackson.core.JsonGenerator;
5+
import com.fasterxml.jackson.core.JsonProcessingException;
6+
import com.fasterxml.jackson.databind.JsonNode;
7+
import com.fasterxml.jackson.databind.ObjectMapper;
8+
import java.io.IOException;
9+
import java.util.Map;
10+
import net.logstash.logback.composite.loggingevent.MdcJsonProvider;
11+
12+
public class LoggingMdcJsonProvider extends MdcJsonProvider {
13+
private final ObjectMapper objectMapper = new ObjectMapper();
14+
15+
@Override
16+
public void writeTo(JsonGenerator generator, ILoggingEvent event) throws IOException {
17+
Map<String, String> mdcProperties = event.getMDCPropertyMap();
18+
if (mdcProperties != null && !mdcProperties.isEmpty()) {
19+
20+
boolean hasWrittenStart = false;
21+
22+
for (Map.Entry<String, String> entry : mdcProperties.entrySet()) {
23+
// removed ability to override MDC key names
24+
String fieldName = entry.getKey();
25+
26+
if (!hasWrittenStart && getFieldName() != null) {
27+
generator.writeObjectFieldStart(getFieldName());
28+
hasWrittenStart = true;
29+
}
30+
generator.writeFieldName(fieldName);
31+
String entryValueString = entry.getValue();
32+
if (isJsonStringJackson(entryValueString)) {
33+
try {
34+
generator.writeTree(convertToTreeNode(entryValueString));
35+
} catch (Exception e) {
36+
// in case of conversion exception, just use String
37+
generator.writeObject(entryValueString);
38+
}
39+
} else {
40+
generator.writeObject(entryValueString);
41+
}
42+
}
43+
if (hasWrittenStart) {
44+
generator.writeEndObject();
45+
}
46+
}
47+
}
48+
49+
public boolean isJsonStringJackson(String s) {
50+
try {
51+
JsonNode jsonNode = objectMapper.readTree(s);
52+
return jsonNode != null;
53+
} catch (JsonProcessingException e) {
54+
return false;
55+
}
56+
}
57+
58+
private JsonNode convertToTreeNode(String jsonString) throws Exception{
59+
JsonNode jsonNode = objectMapper.readTree(jsonString);
60+
return jsonNode;
61+
}
62+
}

java-sdk-logging/pom.xml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
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+
<groupId>com.google.api</groupId>
7+
<artifactId>java-sdk-logging</artifactId>
8+
<version>0.0.1-SNAPSHOT</version>
9+
<packaging>pom</packaging>
10+
<modules>
11+
<module>logback-extension</module>
12+
</modules>
13+
14+
<properties>
15+
<maven.compiler.source>1.8</maven.compiler.source>
16+
<maven.compiler.target>1.8</maven.compiler.target>
17+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
18+
<slf4j.version>1.7.36</slf4j.version>
19+
</properties>
20+
21+
</project>

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
<module>gapic-generator-java-bom</module>
2525
<module>java-shared-dependencies</module>
2626
<module>sdk-platform-java-config</module>
27+
<module>java-sdk-logging</module>
2728
</modules>
2829
<!-- Do not deploy the aggregator POM -->
2930
<build>

0 commit comments

Comments
 (0)