Skip to content

Commit b49298b

Browse files
Refactor Logback Log Generation
Use jackson directly to serialise the Logback log events. Removes the old pattern layout approach. The new approach provides several callback and customisation features. They enable users to extend the library within their own applications. Furthermore, support for custom fields has been extended to support non-string values for top level fields. Also, CloudFoundry's VCAP environment variables are no longer added by default. The user has to opt in those fields Signed-off-by: Karsten Schnitter <[email protected]>
1 parent b435fff commit b49298b

37 files changed

+823
-1485
lines changed

cf-java-logging-support-core/src/main/java/com/sap/hcp/cf/logging/common/converter/DefaultCustomFieldsConverter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ private void addCustomFields(ArrayComposer<ObjectComposer<JSONComposer<String>>>
107107
// Let argument CustomField take precedence over MDC
108108
CustomField field = customFields.get(key);
109109
if (field != null) {
110-
value = field.getValue();
110+
value = String.valueOf(field.getValue());
111111
}
112112
if (value != null) {
113113
oc.startObject().put("k", key).put("v", value).put("i", i).end();

cf-java-logging-support-core/src/main/java/com/sap/hcp/cf/logging/common/customfields/CustomField.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,13 @@ public String getKey() {
3030
return key;
3131
}
3232

33-
public String getValue() {
34-
return String.valueOf(value);
33+
public Object getValue() {
34+
return value;
3535
}
3636

3737
@Override
3838
public String toString() {
39-
return key + "=" + getValue();
39+
return key + "=" + String.valueOf(value);
4040
}
4141

4242
private void validateNotNull(Object obj, String msg) throws IllegalArgumentException {

cf-java-logging-support-core/src/main/java/com/sap/hcp/cf/logging/common/request/RequestRecord.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.time.Clock;
44
import java.time.Duration;
55
import java.time.Instant;
6+
import java.util.Collections;
67
import java.util.HashMap;
78
import java.util.HashSet;
89
import java.util.Map;
@@ -216,6 +217,11 @@ public String toString() {
216217
}
217218
}
218219

220+
public Map<String, Value> getFields() {
221+
finish();
222+
return Collections.unmodifiableMap(fields);
223+
}
224+
219225
private void setDefaults() {
220226
LogContext.loadContextFields();
221227
addValue(Fields.RESPONSE_SIZE_B, Defaults.RESPONSE_SIZE_B);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.sap.hcp.cf.logging.common.serialization;
2+
3+
import java.util.Map;
4+
import java.util.function.Supplier;
5+
6+
@FunctionalInterface
7+
public interface ContextFieldSupplier extends Supplier<Map<String, Object>> {
8+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.sap.hcp.cf.logging.common.serialization;
2+
3+
public class FullVcapEnvFieldFupplier extends VcapEnvFieldSupplier {
4+
5+
public FullVcapEnvFieldFupplier() {
6+
super(true);
7+
}
8+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.sap.hcp.cf.logging.common.serialization;
2+
3+
import java.util.Collections;
4+
import java.util.HashMap;
5+
import java.util.Map;
6+
7+
import com.sap.hcp.cf.logging.common.LogContext;
8+
import com.sap.hcp.cf.logging.common.VcapEnvReader;
9+
10+
public class VcapEnvFieldSupplier implements ContextFieldSupplier {
11+
12+
private final Map<String, Object> envMap;
13+
14+
public VcapEnvFieldSupplier() {
15+
this(false);
16+
}
17+
18+
protected VcapEnvFieldSupplier(boolean sendDefaultValues) {
19+
Map<String, Object> map = new HashMap<>();
20+
map.putAll(VcapEnvReader.getEnvMap());
21+
if (sendDefaultValues) {
22+
LogContext.getContextFieldsKeys().stream().forEach(k -> map.computeIfAbsent(k, LogContext::getDefault));
23+
}
24+
this.envMap = Collections.unmodifiableMap(map);
25+
}
26+
27+
@Override
28+
public Map<String, Object> get() {
29+
return envMap;
30+
}
31+
32+
}

cf-java-logging-support-log4j2/src/main/java/com/sap/hcp/cf/log4j2/converter/ContextPropsConverter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ private Map<String, String> addCustomFieldsFromArguments(Map<String, String> con
7676
result = new HashMap<>(contextData);
7777
unchangedContextData = false;
7878
}
79-
result.put(field.getKey(), field.getValue());
79+
result.put(field.getKey(), String.valueOf(field.getValue()));
8080
}
8181
}
8282
return result;

cf-java-logging-support-logback/src/main/java/com/sap/hcp/cf/logback/converter/CategoriesConverter.java

Lines changed: 0 additions & 61 deletions
This file was deleted.

cf-java-logging-support-logback/src/main/java/com/sap/hcp/cf/logback/converter/ContextPropsConverter.java

Lines changed: 0 additions & 81 deletions
This file was deleted.

cf-java-logging-support-logback/src/main/java/com/sap/hcp/cf/logback/converter/CustomFieldsAdapter.java

Lines changed: 0 additions & 73 deletions
This file was deleted.

0 commit comments

Comments
 (0)