elastic / elastic/ecs-logging-java

Support numeric types on AdditionalField

Abierto
#319 0 comentarios 1 reacción 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

agent-java community triage
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

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. 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

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.