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:
_______________________________________________JsonProviders providers =new JsonProviders()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()
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@qos.ch
http://mailman.qos.ch/mailman/listinfo/logback-user
logback-user mailing list
logback-user@qos.ch
http://mailman.qos.ch/mailman/listinfo/logback-user