ch.qos.logback.classic.pattern.KeyValuePairConverter Maven / Gradle / Ivy
package ch.qos.logback.classic.pattern;
import java.util.List;
import org.slf4j.event.KeyValuePair;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.CoreConstants;
/**
* Convert the contents of {@link KeyValuePair} list to a String.
*
* Assuming the list contains the list {k1, v1}, {k2, v2}, the String output
* will be "k1=v1 k2=v2", without the quotes.
*
*
* @since 1.3.0
* @author Ceki Gülcü
*
*/
public class KeyValuePairConverter extends ClassicConverter {
static final String DOUBLE_OPTION_STR = "DOUBLE";
static final String SINGLE_OPTION_STR = "SINGLE";
static final String NONE_OPTION_STR = "NONE";
enum ValueQuoteSpecification {
NONE, SINGLE, DOUBLE;
Character asChar() {
switch (this) {
case NONE:
return null;
case DOUBLE:
return '"';
case SINGLE:
return '\'';
default:
throw new IllegalStateException();
}
}
}
ValueQuoteSpecification valueQuoteSpec = ValueQuoteSpecification.DOUBLE;
public void start() {
String optStr = getFirstOption();
valueQuoteSpec = optionStrToSpec(optStr);
super.start();
}
private ValueQuoteSpecification optionStrToSpec(String optStr) {
if (optStr == null)
return ValueQuoteSpecification.DOUBLE;
if (DOUBLE_OPTION_STR.equalsIgnoreCase(optStr))
return ValueQuoteSpecification.DOUBLE;
if (SINGLE_OPTION_STR.equalsIgnoreCase(optStr))
return ValueQuoteSpecification.SINGLE;
if (NONE_OPTION_STR.equalsIgnoreCase(optStr))
return ValueQuoteSpecification.NONE;
return ValueQuoteSpecification.DOUBLE;
}
@Override
public String convert(ILoggingEvent event) {
List kvpList = event.getKeyValuePairs();
if (kvpList == null || kvpList.isEmpty()) {
return CoreConstants.EMPTY_STRING;
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < kvpList.size(); i++) {
KeyValuePair kvp = kvpList.get(i);
if (i != 0)
sb.append(' ');
sb.append(String.valueOf(kvp.key));
sb.append('=');
Character quoteChar = valueQuoteSpec.asChar();
if (quoteChar != null)
sb.append(quoteChar);
sb.append(String.valueOf(kvp.value));
if (quoteChar != null)
sb.append(quoteChar);
}
return sb.toString();
}
}