All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ch.qos.logback.classic.layout.TTLLLayout Maven / Gradle / Ivy

package ch.qos.logback.classic.layout;

import ch.qos.logback.classic.pattern.ThrowableProxyConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.classic.spi.IThrowableProxy;
import ch.qos.logback.core.CoreConstants;
import ch.qos.logback.core.LayoutBase;
import ch.qos.logback.core.util.CachingDateFormatter;
import org.slf4j.event.KeyValuePair;

import java.util.List;

/**
 * A layout with a fixed format. The output is equivalent to that produced by
 * {@link ch.qos.logback.classic.PatternLayout PatternLayout} with the pattern:
 * 

* *
 * %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n
 * 
* *

* TTLLLayout has the advantage of faster load time whereas * {@link ch.qos.logback.classic.PatternLayout PatternLayout} requires roughly * 40 milliseconds to load its parser classes. Note that the second run of * PatternLayout will be much much faster (approx. 10 micro-seconds). *

* *

* Fixed format layouts such as TTLLLayout should be considered as an * alternative to PatternLayout only if the extra 40 milliseconds at application * start-up is considered significant. *

* * @author Ceki Gülcü * @since 1.1.6 */ public class TTLLLayout extends LayoutBase { CachingDateFormatter cachingDateFormatter = new CachingDateFormatter("HH:mm:ss.SSS"); ThrowableProxyConverter tpc = new ThrowableProxyConverter(); @Override public void start() { tpc.start(); super.start(); } @Override public String doLayout(ILoggingEvent event) { if (!isStarted()) { return CoreConstants.EMPTY_STRING; } StringBuilder sb = new StringBuilder(); long timestamp = event.getTimeStamp(); sb.append(cachingDateFormatter.format(timestamp)); sb.append(" ["); sb.append(event.getThreadName()); sb.append("] "); sb.append(event.getLevel().toString()); sb.append(" "); sb.append(event.getLoggerName()); sb.append(" -"); kvp(event, sb); sb.append("- "); sb.append(event.getFormattedMessage()); sb.append(CoreConstants.LINE_SEPARATOR); IThrowableProxy tp = event.getThrowableProxy(); if (tp != null) { String stackTrace = tpc.convert(event); sb.append(stackTrace); } return sb.toString(); } static final char DOUBLE_QUOTE_CHAR = '"'; private void kvp(ILoggingEvent event, StringBuilder sb) { List kvpList = event.getKeyValuePairs(); if (kvpList == null || kvpList.isEmpty()) { return; } int len = kvpList.size(); for (int i = 0; i < len; i++) { KeyValuePair kvp = kvpList.get(i); if (i != 0) sb.append(' '); sb.append(String.valueOf(kvp.key)); sb.append('='); sb.append(DOUBLE_QUOTE_CHAR); sb.append(String.valueOf(kvp.value)); sb.append(DOUBLE_QUOTE_CHAR); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy