使用哪种Android日志框架?

时间:2012-05-09 10:22:18

标签: android logging log4j slf4j

我的问题似乎很容易回答,但有几个很好的解决方案。 我喜欢选择“最好的”。

可用框架(随意提出更多建议):

优点/缺点:

Androlog:

  • Pro:与Android日志框架类似,因此现有代码只有很小的变化;能够在错误报告中更详细地发送崩溃报告(异常周围的日志);好日志
  • Con:没有标准的java“getLogger”方法;通过将属性文件上传到SD卡可实现生产配置;我需要手动调用init日志;需要像常量一样创建LOG_TAG,或者通过Aspect来破解它来创建日志标记常量来实现标准行为:标签是类名;当日志记录是业务需求时,我们需要对其进行测试。在Android上测试静态调用几乎是不可能的Logger不能通过框架注入

Log4J的功能的Android:

  • Pro:登录Java的标准方式;兼容SLF4J;能够解析属性文件;
  • Con:没有内置的崩溃报告系统;在我看来:它不常用,所以使用它可能会有危险;

SLF4J功能的Android:

  • Pro:似乎是由像Log4J-Android这样的更多人开发的;如果关闭记录器,logger.debug("Some log message. Details: {}", someObject.toString());是一种跳过字符串连接的好方法!委托给android.util.Log的轻量级记录器绑定。
  • Con:由于Android平台上日志标记的长度限制(例如,com.example.myapp.MyClass标记已转换为c*.e*.m*.MyClass),自动生成的<= 23个字符长的日志标记,这可能会导致在不同类的相同日志标记中(例如,com.example.app.MyClasscom.example.anotherapp.MyClass都转换为c*.e*.a*.MyClass);没有内置的崩溃报告系统。

除了这些,我喜欢Androlog的行为,但我是Java开发人员,熟悉log4j / slf4j。 我们肯定需要崩溃报告系统,但有几个崩溃报告框架(除了android默认崩溃报告)。

我可以将它们中的一些组合起来,比如使用Log4J android,但是创建一个appender来使用androlog框架,但迟早会是一团糟,应该避免。

感谢您的建议,我希望结果将有助于将来决定其他人。

编辑:如下所述,我可以结合使用ex:log4j-android和slf4j(如果我使用log4j,我更喜欢做什么,因为日志格式化支持(“{}”,...)),但它没有回答这个问题。我必须选择一个框架,然后我可以用SLF4J外观装饰它。

3 个答案:

答案 0 :(得分:12)

更好的方法。我认为,是使用SLF4J API +的一些实现。

对于Android应用程序,您可以使用以下内容:

  1. Android Logger是轻量级但易于配置的SLF4J实现(<50 Kb)。
  2. LOGBack是最强大和优化的实现,但其大小约为1 Mb。
  3. 根据您的喜好选择其他任何内容:slf4jandroidslf4j-android

答案 1 :(得分:5)

请检查this第一个回答

它说:

  

SLF4J基本上是一个抽象层。它不是日志记录   实现。这意味着如果你正在编写一个库并且你正在使用它   SLF4J,您可以将该库提供给其他人使用,他们可以   选择与SLF4J一起使用的日志记录实现,例如log4j或   Java日志API。它有助于防止项目依赖   许多日志API只是因为它们使用了库   依赖于他们。

     

因此,总结一下:SLF4J不会取代log4j,它们可以协同工作。它   从库/ app中删除对log4j的依赖。

答案 2 :(得分:2)

我已经尝试了original slf4j.org-android但不幸的是,这个jar无法记录调试/详细消息,因为它内部使用LOG.isDebugEnabled()进行调试输出,似乎总是错误。

目前我使用替代lp0-slf4j-android实现,该实现使用带有日志记录设置的属性文件,如果启用,我还可以获得调试/详细消息。