title: Which Android logging framework to use?
body: <p>My question seems to be easily answerable, but there are several good solutions.
  I like to choose the 'best' one.</p>
  
  <h1>Available frameworks (feel free to suggest more):</h1>
  
  <ul>
  <li><a href="http://akquinet.github.com/androlog/">Androlog</a></li>
  <li><a href="http://www.slf4j.org/android/">SLF4J Android</a></li>
  <li><a href="http://code.google.com/p/android-logging-log4j/">Log4J - Android</a></li>
  </ul>
  
  <h1>Pros/Cons:</h1>
  
  <h2>Androlog:</h2>
  
  <ul>
  <li>Pro: Similar to Android logging framework, so there are only small changes in the existing code; Able to send crash reports with more detail in the error report (the logs around the exception); Nice logs</li>
  <li>Con: No standard java "getLogger" approach; Production configuration achievable by uploading property file to sdcard; I need to call init logging manually; Need to create LOG_TAG like constants, or hack it to create log tag constants by Aspect to achieve the standard behavior: tags are the class names; When logging is a business requirement, we need to test it. Testing static calls on Android nearly impossible; Logger can not be injected by framework</li>
  </ul>
  
  <h2>Log4J-Android:</h2>
  
  <ul>
  <li>Pro: Standard way to log in Java; Compatible with SLF4J; Able to parse property files; </li>
  <li>Con: No built-in crash report system; Seems to me: its not commonly used, so it might me dangerous to use it;</li>
  </ul>
  
  <h2>SLF4J-Android:</h2>
  
  <ul>
  <li>Pro: Seems to be developed by more people like Log4J-Android; The <code>logger.debug("Some log message. Details: {}", someObject.toString());</code> is a good, and effective way to skip string concatenations if the logger is turned off; lightweight logger binding that delegates to <code>android.util.Log</code>.</li>
  <li>Con: Auto generated log tags that are &lt;= 23 characters long due to a length restriction of log tags on the Android platform (e.g., <code>com.example.myapp.MyClass</code> tag translated to <code>c*.e*.m*.MyClass</code>), which can result in the same log tag for different classes (e.g., <code>com.example.app.MyClass</code> and <code>com.example.anotherapp.MyClass</code> both translate to <code>c*.e*.a*.MyClass</code>); No built in crash reporting system.</li>
  </ul>
  
  <p>Besides of these, I like Androlog behavior, but I'm a Java dev, familiar with log4j/slf4j.
  We will definitely need crash report system, but there are several frameworks for crash reporting (beside of android default crash report).</p>
  
  <p>I can combine some of them, for example use Log4J android, but create an appender to use the androlog framework, but sooner or later it will be a mess, which should be avoided.</p>
  
  <p>Thanks for your suggestions, I hope the results will help decide others in the future.</p>
  
  <p>Edit: As mentioned below, I can combine for ex: log4j-android with slf4j (whitch I prefer to do if I'll use log4j, because the log formatting support ("{}",...) ), but it does not answers the question. I have to choose a framework, then I can decorate it with the SLF4J facade.</p>