package com.ankurm.structuredlogging;

import ch.qos.logback.classic.spi.ILoggingEvent;
import org.springframework.boot.logging.structured.StructuredLogFormatter;

/**
 * A StructuredLogFormatter doesn't have to emit JSON - this one emits a
 * pipe-delimited line instead, to show the extension point is "format
 * this event however you like", not "write another JSON encoder". The
 * type parameter (ILoggingEvent) ties this formatter to Logback; a
 * Log4j2 equivalent would implement StructuredLogFormatter<LogEvent>
 * instead.
 *
 * Wired in via a property, not code:
 *   logging.structured.format.console=com.ankurm.structuredlogging.PipeDelimitedLogFormatter
 */
public class PipeDelimitedLogFormatter implements StructuredLogFormatter<ILoggingEvent> {

    @Override
    public String format(ILoggingEvent event) {
        return event.getLevel() + "|" + event.getLoggerName() + "|" + event.getFormattedMessage() + "\n";
    }
}
