LogbackKeyValuesFormatter.java
package io.jstach.rainbowgum.pattern.format;
import org.jspecify.annotations.Nullable;
import io.jstach.rainbowgum.KeyValues;
import io.jstach.rainbowgum.KeyValues.KeyValuesConsumer;
import io.jstach.rainbowgum.LogEvent;
import io.jstach.rainbowgum.LogFormatter;
/*
* Logback's %X/%mdc with no key: every key value as comma space separated key=value
* pairs, with no surrounding braces (unlike Log4j2) and no encoding. A key mapped to null
* is written without "=" to tell it apart from an empty string, and no key values write
* nothing. Lives here rather than in core since it exists for Logback pattern
* compatibility; core's own key values formats are logfmt and percent encoding.
*/
enum LogbackKeyValuesFormatter implements LogFormatter.EventFormatter, KeyValuesConsumer<StringBuilder> {
INSTANCE;
@Override
public void format(StringBuilder output, LogEvent event) {
event.keyValues().forEach(this, 0, output);
}
@Override
public int accept(KeyValues values, String key, @Nullable String value, int index, StringBuilder storage) {
if (index > 0) {
storage.append(", ");
}
storage.append(key);
if (value != null) {
storage.append('=').append(value);
}
return index + 1;
}
}