<div dir="ltr"><span style="font-size:12.8px">Hi,</span><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">In a Grails app for my customer I'm using the LogstashTcpSocketAppender provided by this project <a href="https://github.com/logstash/logstash-logback-encoder" target="_blank">https://github.com/logstash/logstash-logback-encoder</a>.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">It works perfectly fine with the logback.xml configuration which looks as follows:</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px"><pre style="white-space:pre-wrap;color:rgb(169,183,198);font-family:'Courier New';background-color:rgb(43,43,43)"><span style="color:rgb(232,191,106)"><?</span><span style="color:rgb(186,186,186)">xml version</span><span style="color:rgb(165,194,97)">="1.0" </span><span style="color:rgb(186,186,186)">encoding</span><span style="color:rgb(165,194,97)">="UTF-8"</span><span style="color:rgb(232,191,106)">?><br></span><span style="color:rgb(232,191,106)"><configuration><br></span><span style="color:rgb(232,191,106)"><br></span><span style="color:rgb(232,191,106)">    <shutdownHook </span><span style="color:rgb(186,186,186)">class</span><span style="color:rgb(165,194,97)">="ch.qos.logback.core.hook.DelayingShutdownHook"</span><span style="color:rgb(232,191,106)">/><br></span><span style="color:rgb(232,191,106)"><br></span><span style="color:rgb(232,191,106)">    <appender </span><span style="color:rgb(186,186,186)">name</span><span style="color:rgb(165,194,97)">="console" </span><span style="color:rgb(186,186,186)">class</span><span style="color:rgb(165,194,97)">="ch.qos.logback.core.ConsoleAppender"</span><span style="color:rgb(232,191,106)">/><br></span><span style="color:rgb(232,191,106)"><br></span><span style="color:rgb(232,191,106)">    <appender </span><span style="color:rgb(186,186,186)">name</span><span style="color:rgb(165,194,97)">="tcp" </span><span style="color:rgb(186,186,186)">class</span><span style="color:rgb(165,194,97)">="net.logstash.logback.appender.LogstashTcpSocketAppender"</span><span style="color:rgb(232,191,106)">><br></span><span style="color:rgb(232,191,106)">        <destination></span>localhost:4560<span style="color:rgb(232,191,106)"></destination><br></span><span style="color:rgb(232,191,106)">        <encoder </span><span style="color:rgb(186,186,186)">class</span><span style="color:rgb(165,194,97)">="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"</span><span style="color:rgb(232,191,106)">><br></span><span style="color:rgb(232,191,106)">            <providers><br></span><span style="color:rgb(232,191,106)">                <message/><br></span><span style="color:rgb(232,191,106)">                <mdc/><br></span><span style="color:rgb(232,191,106)">                <arguments/><br></span><span style="color:rgb(232,191,106)">            </providers><br></span><span style="color:rgb(232,191,106)">        </encoder><br></span><span style="color:rgb(232,191,106)">    </appender><br></span><span style="color:rgb(232,191,106)"><br></span><span style="color:rgb(232,191,106)">    <root </span><span style="color:rgb(186,186,186)">level</span><span style="color:rgb(165,194,97)">="all"</span><span style="color:rgb(232,191,106)">><br></span><span style="color:rgb(232,191,106)">        <appender-ref </span><span style="color:rgb(186,186,186)">ref</span><span style="color:rgb(165,194,97)">="console"</span><span style="color:rgb(232,191,106)">/><br></span><span style="color:rgb(232,191,106)">        <appender-ref </span><span style="color:rgb(186,186,186)">ref</span><span style="color:rgb(165,194,97)">="tcp"</span><span style="color:rgb(232,191,106)">/><br></span><span style="color:rgb(232,191,106)">    </root><br></span><span style="color:rgb(232,191,106)"><br></span><span style="color:rgb(232,191,106)"></configuration></span></pre></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">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):</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px"><pre style="white-space:pre-wrap;color:rgb(169,183,198);font-family:'Courier New';background-color:rgb(43,43,43)"><span style="color:rgb(204,120,50)">import </span>ch.qos.logback.core.Appender<br><span style="color:rgb(204,120,50)">import </span>net.logstash.logback.appender.LogstashTcpSocketAppender<br><span style="color:rgb(204,120,50)">import </span>net.logstash.logback.composite.JsonProviders<br><span style="color:rgb(204,120,50)">import </span>net.logstash.logback.composite.loggingevent.ArgumentsJsonProvider<br><span style="color:rgb(204,120,50)">import </span>net.logstash.logback.composite.loggingevent.MdcJsonProvider<br><span style="color:rgb(204,120,50)">import </span>net.logstash.logback.composite.loggingevent.MessageJsonProvider<br><span style="color:rgb(204,120,50)">import </span>net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder<br><br><span style="color:rgb(128,128,128)">appender</span>(<span style="color:rgb(106,135,89)">'STDOUT'</span>, <span style="color:rgb(128,128,128)">ConsoleAppender</span>) {<br>    <span style="color:rgb(128,128,128)">encoder</span>(<span style="color:rgb(128,128,128)">PatternLayoutEncoder</span>) {<br>        pattern = <span style="color:rgb(106,135,89)">'%-4relative [%thread] %msg%n'<br></span><span style="color:rgb(106,135,89)">    </span>}<br>}<br><br>addAppender(<span style="color:rgb(106,135,89)">'LOGSTASH_TCP'</span>, createLogstashTcpSocketAppender(<span style="color:rgb(106,135,89)">'localhost:4560'</span>))<br><br><span style="color:rgb(128,128,128)">root</span>(<span style="color:rgb(128,128,128)">DEBUG</span>, [<span style="color:rgb(106,135,89)">'STDOUT'</span>, <span style="color:rgb(106,135,89)">'LOGSTASH_TCP'</span>])<br><br>println <span style="color:rgb(128,128,128)">appenderList<br></span><span style="color:rgb(128,128,128)"><br></span>Appender createLogstashTcpSocketAppender(String destination) {<br>    LoggingEventCompositeJsonEncoder encoder = <span style="color:rgb(204,120,50)">new </span>LoggingEventCompositeJsonEncoder()<br>    JsonProviders providers = <span style="color:rgb(204,120,50)">new </span>JsonProviders()<br>    providers.addProvider(<span style="color:rgb(204,120,50)">new </span>MessageJsonProvider())<br>    providers.addProvider(<span style="color:rgb(204,120,50)">new </span>MdcJsonProvider())<br>    providers.addProvider(<span style="color:rgb(204,120,50)">new </span>ArgumentsJsonProvider())<br>    encoder.<span style="color:rgb(152,118,170)">setProviders</span>(providers)<br><br>    Appender appender = <span style="color:rgb(204,120,50)">new </span>LogstashTcpSocketAppender()<br>    appender.addDestination(destination)<br>    appender.<span style="color:rgb(152,118,170)">setEncoder</span>(encoder)<br>    appender<br>}<br><br><span style="color:rgb(204,120,50)">void </span>addAppender(String name, Appender appender) {<br>    appender.<span style="color:rgb(152,118,170)">name </span>= name<br>    appender.<span style="color:rgb(152,118,170)">context </span>= <span style="color:rgb(128,128,128)">context<br></span><span style="color:rgb(128,128,128)"><br></span><span style="color:rgb(128,128,128)">    appenderList</span>.add(appender)<br>    appender.start()<br>}<br></pre></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Regards,</div><div style="font-size:12.8px">Daniel Pacak</div></div>