[logback-user] [ConfigurationDelegate.groovy] LogstashTcpSocketAppender
Ceki Gulcu
ceki at qos.ch
Thu Mar 24 10:46:28 UTC 2016
Have you tried the logback.xml to logback.groovy translator? It is
available at
http://logback.qos.ch/translator/asGroovy.html
Anyway, the logback.xml you provided translates into the following
logback.groovy file:
import ch.qos.logback.core.ConsoleAppender
import ch.qos.logback.core.spi.LifeCycle
import net.logstash.logback.appender.LogstashTcpSocketAppender
import net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder
import static ch.qos.logback.classic.Level.ALL
appender("console", ConsoleAppender)
appender("tcp", LogstashTcpSocketAppender) {
destination = "localhost:4560"
encoder(LoggingEventCompositeJsonEncoder) {
// You MUST add an import declaration as appropriate for [Providers]
Providers... aProviders = new Providers()
aProviders.message =
aProviders.mdc =
aProviders.arguments =
if(aProviders instanceof LifeCycle)
aProviders.start()
providers = aProviders
}
}
root(ALL, ["console", "tcp"])
You can fill in the missing statements without too much trouble.
Providers _providers = new LoggingEventCompositeJsonEncoder()
_providers.message = new MessageJsonProvider();
_providers.mdc = new MdcJsonProvider();
_providers.arguments = new ArgumentsJsonProvider();
if(_providers instanceof LifeCycle)
_providers .start()
providers = _providers
you would need to add the following imports for the above to work.
It looks like logstash-logback-encoder makes extensive use of Joran's
(logback's xml configurator) @DefaultClass annotation as well as its
default component initialization mechanism.
To cut a long story short, the more verbose but equivalent version of
the logback.xml would be written as
<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
class="net.logstash.logback.composite.loggingevent.LoggingEventJsonProviders">
<message
class="net.logstash.logback.composite.loggingevent.MessageJsonProvider"/>
<mdc
class="net.logstash.logback.composite.loggingevent.MdcJsonProvider"/>
<arguments
class="net.logstash.logback.composite.loggingevent.ArgumentsJsonProvider"/>
</providers>
</encoder>
</appender>
<root level="all">
<appender-ref ref="console"/>
<appender-ref ref="tcp"/>
</root>
</configuration>
When translated with the XML to Groovy translator, the results is
import ch.qos.logback.core.ConsoleAppender
import net.logstash.logback.appender.LogstashTcpSocketAppender
import net.logstash.logback.composite.loggingevent.ArgumentsJsonProvider
import net.logstash.logback.composite.loggingevent.LoggingEventJsonProviders
import net.logstash.logback.composite.loggingevent.MdcJsonProvider
import net.logstash.logback.composite.loggingevent.MessageJsonProvider
import net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder
import static ch.qos.logback.classic.Level.ALL
appender("console", ConsoleAppender)
appender("tcp", LogstashTcpSocketAppender) {
destination = "localhost:4560"
encoder(LoggingEventCompositeJsonEncoder) {
providers(LoggingEventJsonProviders) {
message(MessageJsonProvider)
mdc(MdcJsonProvider)
arguments(ArgumentsJsonProvider)
}
}
}
root(ALL, ["console", "tcp"])
Both groovy scripts should work.
I hope this helps,
--
Ceki
On 3/24/2016 10:54, Daniel Pacak wrote:
> Hi,
>
> In a Grails app for my customer I'm using the LogstashTcpSocketAppender
> provided by this project
> https://github.com/logstash/logstash-logback-encoder.
>
> 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'])
>
> printlnappenderList
>
> 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
>
>
> _______________________________________________
> logback-user mailing list
> logback-user at qos.ch
> http://mailman.qos.ch/mailman/listinfo/logback-user
>
More information about the logback-user
mailing list