Hi,
It works perfectly fine with the logback.xml configuration which looks as follows:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender"/>
<appender name="tcp" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>localhost:4560</destination>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<message/>
<mdc/>
<arguments/>
</providers>
</encoder>
</appender>
<root level="all">
<appender-ref ref="console"/>
<appender-ref ref="tcp"/>
</root>
</configuration>
However I had hard time configuring the same in logback.groovy; Do you have any idea how to configure LogstashTcpSocketAppender in groovy style? So far I came up with the following snippet which sucks a bit because it depends on Logback internals (mixed in ConfigurationDelegate properties/methods):
import ch.qos.logback.core.Appender
import net.logstash.logback.appender.LogstashTcpSocketAppender
import net.logstash.logback.composite.JsonProviders
import net.logstash.logback.composite.loggingevent.ArgumentsJsonProvider
import net.logstash.logback.composite.loggingevent.MdcJsonProvider
import net.logstash.logback.composite.loggingevent.MessageJsonProvider
import net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder
appender('STDOUT', ConsoleAppender) {
encoder(PatternLayoutEncoder) {
pattern = '%-4relative [%thread] %msg%n'
}
}
addAppender('LOGSTASH_TCP', createLogstashTcpSocketAppender('localhost:4560'))
root(DEBUG, ['STDOUT', 'LOGSTASH_TCP'])
println appenderList
Appender createLogstashTcpSocketAppender(String destination) {
LoggingEventCompositeJsonEncoder encoder = new LoggingEventCompositeJsonEncoder()
JsonProviders providers = new JsonProviders()
providers.addProvider(new MessageJsonProvider())
providers.addProvider(new MdcJsonProvider())
providers.addProvider(new ArgumentsJsonProvider())
encoder.setProviders(providers)
Appender appender = new LogstashTcpSocketAppender()
appender.addDestination(destination)
appender.setEncoder(encoder)
appender
}
void addAppender(String name, Appender appender) {
appender.name = name
appender.context = context
appenderList.add(appender)
appender.start()
}
Regards,
Daniel Pacak