elastic / elastic/ecs-logging-java
Support numeric types on AdditionalField
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Java
- Estrellas
- 148
- Forks
- 82
- Merge medio
- 2 d 17 h
- PR fusionados (30 d)
- 3
Descripción
We just moved away from logstash to now directly send the logs from our systems into elastic using filebeat.
As we used structured logging of logstash, we had to compensate that by using a custom Slf4jKeyValueEncoder which maps the key/value pairs from slf4 to the AdditionalField supported by ECS encoder.
Something like that:
public final class Slf4jKeyValueEncoder extends EcsEncoder {
@Override
protected void addCustomFields(ILoggingEvent event, StringBuilder builder) {
requireNonNull(event, "A logging event is required");
var logEventAdditionalFields = convertKeyValuePairsToAdditionalFields(event.getKeyValuePairs());
EcsJsonSerializer.serializeAdditionalFields(builder, logEventAdditionalFields);
}
private List<AdditionalField> convertKeyValuePairsToAdditionalFields(List<KeyValuePair> keyValuePairs) {
if (keyValuePairs == null) {
return Collections.emptyList();
}
return keyValuePairs
.stream()
.map(it -> new AdditionalField(it.key, it.value.toString()))
.toList();
}
}
As we can see, AdditionalField supports values of String only.
The problem is that if we log something that is an Integer or Long, this ends up in Elastic like "1" or "1321654654". That prevents having fields in Elastic as numeric values.
Perhaps we could have value as an Object and a switch statement, when writing to the StringBuilder, to check if it's Number or Boolean and write it without the double quotes?
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza localizando AdditionalField y EcsJsonSerializer; después, sigue cómo se escriben los valores de los campos adicionales en el StringBuilder. Define la finalización manteniendo las cadenas entre comillas mientras se emiten los valores numéricos y booleanos como tipos JSON nativos, y añade o actualiza la cobertura para esos tipos de valores si el proyecto tiene pruebas correspondientes.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- java
- Área
- observability-sre
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 45/100