Skip to content

Instantly share code, notes, and snippets.

@happysundar
Created April 12, 2015 05:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save happysundar/e249714071b22cc27f92 to your computer and use it in GitHub Desktop.
Save happysundar/e249714071b22cc27f92 to your computer and use it in GitHub Desktop.
Logstash appender for dropwizard : this generates a logstash compatible log file that can be synced using the logstash-forwarder
- type: logstashfile
currentLogFilename: /melodis/logs/UserDataStorage/logstash/logstash.log
threshold: ALL
archive: true
archivedLogFilenamePattern: /melodis/logs/UserDataStorage/logstash/logstash-%d.log
archivedFileCount: 48
timeZone: UTC
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.Appender;
import ch.qos.logback.core.FileAppender;
import ch.qos.logback.core.Layout;
import com.fasterxml.jackson.annotation.JsonTypeName;
import io.dropwizard.logging.FileAppenderFactory;
import net.logstash.logback.encoder.LogstashEncoder;
@JsonTypeName("logstashfile")
public class LogstashAppender extends FileAppenderFactory
{
@Override
public Appender<ILoggingEvent> build (final LoggerContext context, final String applicationName, final Layout<ILoggingEvent> layout)
{
final FileAppender<ILoggingEvent> appender = buildAppender( context );
appender.setName( "logstashfile-appender" );
appender.setPrudent( false );
appender.setAppend( true );
appender.setContext( context );
final LogstashEncoder logstashEncoder = new LogstashEncoder();
logstashEncoder.setIncludeCallerInfo( true );
logstashEncoder.setIncludeMdc( true );
logstashEncoder.setTimeZone( super.getTimeZone().getID() );
logstashEncoder.setContext( context );
logstashEncoder.setIncludeContext( true );
logstashEncoder.setImmediateFlush( true );
logstashEncoder.start();
appender.setEncoder( logstashEncoder );
appender.setFile( super.getCurrentLogFilename() );
appender.setPrudent(false);
addThresholdFilter(appender, threshold);
appender.stop();
appender.start();
return wrapAsync( appender );
}
@Override
protected FileAppender<ILoggingEvent> buildAppender (final LoggerContext context)
{
return super.buildAppender( context );
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment