title: How to add logback to gradle project
body: <p>I need to add logback to my project.
  This is my test class:</p>
  
  <pre><code>public class Head implements Runnable {
      Thread trd;
  
      Head() {
          trd = new Thread(this);
          trd.start();
      }
      static Logger logger = LoggerFactory.getLogger(Head.class);
  
      @Override
      public void run() {
          MDC.put("logName", "LOG_NAME");
          logger.warn("test1");
          logger.info("test2");
          logger.error("test");
          MDC.remove("logName");
      }
  
      public static void main(String[] args) {
          String URL = "logback-test.xml";
          System.out.println(ClassLoader.getSystemResource(URL));
          int count = 1;
          while(count&lt;=3){
              Head head = new Head();
              count++;
          }
      }
  }
  </code></pre>
  
  <p>Here are my logback-test.xml file:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
  &lt;configuration&gt;
  
      &lt;appender name="FILE" class="ch.qos.logback.classic.sift.SiftingAppender"&gt;
  
          &lt;discriminator&gt;
              &lt;key&gt;logName&lt;/key&gt;
              &lt;defaultValue&gt;test&lt;/defaultValue&gt;
          &lt;/discriminator&gt;
          &lt;sift&gt;
              &lt;appender name="FILE-${logName}" class="ch.qos.logback.core.FileAppender"&gt;
                  &lt;file&gt;D:/tmp/${logName}.log&lt;/file&gt;
                  &lt;append&gt;false&lt;/append&gt;
                  &lt;layout class="ch.qos.logback.classic.PatternLayout"&gt;
                      &lt;pattern&gt;%d [%thread] %level %mdc %logger{35} - %msg%n&lt;/pattern&gt;
                  &lt;/layout&gt;
              &lt;/appender&gt;
          &lt;/sift&gt;
      &lt;/appender&gt;
  
      &lt;root level="ALL"&gt;
          &lt;appender-ref ref="FILE" /&gt;
      &lt;/root&gt;
  &lt;/configuration&gt;
  </code></pre>
  
  <p>I have added following groovy dependencies:</p>
  
  <pre><code>compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.21'
  compile group: 'org.slf4j', name: 'jcl-over-slf4j', version: '1.7.21'
  compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.1.7'
  compile group: 'ch.qos.logback', name: 'logback-core', version: '1.1.7'
  compile group: 'ch.qos.logback', name: 'logback-access', version: '1.1.7'
  compile "org.codehaus.groovy:groovy:1.8.9"
  </code></pre>
  
  <p>But when I try to run main method I get:</p>
  
  <pre><code>file:/D:/my_tests/build/resources/main/logback-test.xml
      Failed to instantiate [ch.qos.logback.classic.LoggerContext]
         Reported exception:
      java.lang.NoClassDefFoundError: org/codehaus/groovy/runtime/typehandling/ShortTypeHandling
  at ch.qos.logback.classic.gaffer.GafferConfigurator.run(GafferConfigurator.groovy:59)
  at ch.qos.logback.classic.gaffer.GafferConfigurator$run.callCurrent(Unknown Source)
  at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:46)
  at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
  at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141)
  at ch.qos.logback.classic.gaffer.GafferConfigurator.run(GafferConfigurator.groovy:44)
  at ch.qos.logback.classic.gaffer.GafferUtil.runGafferConfiguratorOn(GafferUtil.java:43)
  at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:67)
  at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:150)
  at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84)
  at org.slf4j.impl.StaticLoggerBinder.&lt;clinit&gt;(StaticLoggerBinder.java:55)
  at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150)
  at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124)
  at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:412)
  at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357)
  at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:383)
  at com.aerlingus.uita.utils.Head.&lt;clinit&gt;(Head.java:20)
  at java.lang.Class.forName0(Native Method)
  at java.lang.Class.forName(Class.java:264)
  at com.intellij.rt.execution.application.AppMain.main(AppMain.java:122)
            Caused by: java.lang.ClassNotFoundException:                        org.codehaus.groovy.runtime.typehandling.ShortTypeHandling
  at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  ... 20 more
  </code></pre>
  
  <p>Could you help me to fix this?</p>
  
  <p>Error after adding dependency <code>compile group: 'org.codehaus.groovy', name: 'groovy-backports-compat23', version: '2.3.5'</code>:</p>
  
  <pre><code>Failed to instantiate [ch.qos.logback.classic.LoggerContext]
                Reported exception:
       java.lang.IncompatibleClassChangeError: the number of constructors during runtime and compile time for ch.qos.logback.classic.gaffer.NestingType do not match. Expected -1 but got 2
  at groovy.lang.MetaClassImpl.selectConstructorAndTransformArguments(MetaClassImpl.java:1413)
  at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.selectConstructorAndTransformArguments(ScriptBytecodeAdapter.java:234)
  at ch.qos.logback.classic.gaffer.NestingType.$INIT(NestedType.groovy)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:497)
  at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
  at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
  at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.invoke(StaticMetaMethodSite.java:43)
  at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.callStatic(StaticMetaMethodSite.java:99)
  at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:50)
  at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:157)
  at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:169)
  at ch.qos.logback.classic.gaffer.NestingType.&lt;clinit&gt;(NestedType.groovy)
  at sun.misc.Unsafe.ensureClassInitialized(Native Method)
  at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:43)
  at sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:142)
  at java.lang.reflect.Field.acquireFieldAccessor(Field.java:1088)
  at java.lang.reflect.Field.getFieldAccessor(Field.java:1069)
  at java.lang.reflect.Field.get(Field.java:393)
  at org.codehaus.groovy.reflection.CachedField.getProperty(CachedField.java:51)
  at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:1565)
  at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:3343)
  at org.codehaus.groovy.runtime.callsite.ClassMetaClassGetPropertySite.getProperty(ClassMetaClassGetPropertySite.java:48)
  at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:227)
  at ch.qos.logback.classic.gaffer.PropertyUtil.nestingType(PropertyUtil.groovy:32)
  at ch.qos.logback.classic.gaffer.PropertyUtil$nestingType.call(Unknown Source)
  at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
  at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
  at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120)
  at ch.qos.logback.classic.gaffer.ComponentDelegate.methodMissing(ComponentDelegate.groovy:39)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:497)
  at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
  at groovy.lang.MetaClassImpl.invokeMissingMethod(MetaClassImpl.java:830)
  at groovy.lang.MetaClassImpl.invokePropertyOrMissing(MetaClassImpl.java:1128)
  at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1081)
  at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:903)
  at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:723)
  at ch.qos.logback.classic.gaffer.ComponentDelegate.invokeMethod(ComponentDelegate.groovy)
  at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeOnDelegationObjects(ClosureMetaClass.java:407)
  at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:348)
  at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:903)
  at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:66)
  at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:46)
  at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
  at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:145)
  at Script1$_run_closure1.doCall(Script1.groovy:8)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:497)
  at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
  at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
  at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:272)
  at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:903)
  at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:66)
  at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:46)
  at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
  at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141)
  at Script1$_run_closure1.doCall(Script1.groovy)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:497)
  at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
  at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
  at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:272)
  at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:903)
  at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:39)
  at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
  at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
  at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112)
  at ch.qos.logback.classic.gaffer.ConfigurationDelegate.appender(ConfigurationDelegate.groovy:143)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:497)
  at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
  at org.codehaus.groovy.runtime.metaclass.MixinInstanceMetaMethod.invoke(MixinInstanceMetaMethod.java:53)
  at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoMetaMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:313)
  at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:52)
  at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:46)
  at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
  at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149)
  at Script1.run(Script1.groovy:7)
  at Script1$run.call(Unknown Source)
  at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
  at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
  at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112)
  at ch.qos.logback.classic.gaffer.GafferConfigurator.run(GafferConfigurator.groovy:77)
  at ch.qos.logback.classic.gaffer.GafferConfigurator$run.callCurrent(Unknown Source)
  at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:46)
  at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
  at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141)
  at ch.qos.logback.classic.gaffer.GafferConfigurator.run(GafferConfigurator.groovy:44)
  at ch.qos.logback.classic.gaffer.GafferUtil.runGafferConfiguratorOn(GafferUtil.java:43)
  at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:67)
  at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:150)
  at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84)
  at org.slf4j.impl.StaticLoggerBinder.&lt;clinit&gt;(StaticLoggerBinder.java:55)
  at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150)
  at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124)
  at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:412)
  at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357)
  at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:383)
  at com.aerlingus.uita.utils.Head.&lt;clinit&gt;(Head.java:20)
  at java.lang.Class.forName0(Native Method)
  at java.lang.Class.forName(Class.java:264)
  at com.intellij.rt.execution.application.AppMain.main(AppMain.java:122)
  </code></pre>