title: What is likely cause of Android runtime exception "No suitable Log implementation" related to logging in 3rd-party jar?
body: <p>I am creating an Android app that includes a third party jar.   That third party jar utilizes internal logging that is failing to initialize when I run the app, with this error: "org.apache.commons.logging.LogConfigurationException: No suitable Log implementation".   </p>
  
  <p>The 3rd party jar appears to be using org.apache.commons.logging and to depend on log4j, specifically log4j-1.2.14.jar.  I have packaged the log4j jar into the Android app.  The third party jar was packaged with a log4j.xml configuration file, which I have tried packaging into the app as an XML resource (and also as a raw resource).  </p>
  
  <p>The "No suitable Log implementation" error message is not very descriptive, and I have no immediate familiarity with Java logging.   So I am looking for likely causes of the problem (what class or configuration resources might I be missing?) or for some debugging technique that will result in a different error message that is more explicit about the problem.  I do not have access to source code for the 3rd party jar.</p>
  
  <p>Here is the exception stack trace.  When I run the app, I get the following exception as soon as one of the third party jar classes attempts to initialize its internal logging.  </p>
  
  <pre><code>DEBUG/AndroidRuntime(15694): Shutting down VM
  WARN/dalvikvm(15694): threadid=3: thread exiting with uncaught exception (group=0x4001b180)
  ERROR/AndroidRuntime(15694): Uncaught handler: thread main exiting due to uncaught exception
  ERROR/AndroidRuntime(15694): java.lang.ExceptionInInitializerError
  ERROR/AndroidRuntime(15694): Caused by: org.apache.commons.logging.LogConfigurationException: No suitable Log implementation
  ERROR/AndroidRuntime(15694):     at org.apache.commons.logging.impl.LogFactoryImpl.discoverLogImplementation(LogFactoryImpl.java:842)
  ERROR/AndroidRuntime(15694):     at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:601)
  ERROR/AndroidRuntime(15694):     at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:333)
  ERROR/AndroidRuntime(15694):     at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:307)
  ERROR/AndroidRuntime(15694):     at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:645)
  ERROR/AndroidRuntime(15694):     at org.apache.commons.configuration.ConfigurationFactory.&lt;clinit&gt;(ConfigurationFactory.java:77)
  </code></pre>