54

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

可用的框架(请随时提出更多建议):

优点缺点:

雄激素:

  • 优点:类似于Android日志框架,所以对现有代码只有很小的改动;能够在错误报告中发送更详细的崩溃报告(异常日志);漂亮的原木
  • 缺点:没有标准的 java“getLogger”方法;通过将属性文件上传到 sdcard 可实现生产配置;我需要手动调用初始化日志;需要创建 LOG_TAG 类常量,或者通过 Aspect 破解它来创建日志标签常量以实现标准行为:标签是类名;当日志记录是一项业务需求时,我们需要对其进行测试。在 Android 上测试静态调用几乎是不可能的;记录器不能被框架注入

Log4J-安卓:

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

SLF4J-安卓:

  • Pro:好像是由更多人开发的,比如Log4J-Android;logger.debug("Some log message. Details: {}", someObject.toString());如果关闭记录器,这是一种跳过字符串连接的好方法;委托给android.util.Log.
  • 缺点:由于 Android 平台上日志标签的长度限制(例如,com.example.myapp.MyClass标签翻译c*.e*.m*.MyClass为) ; 没有内置的崩溃报告系统。com.example.app.MyClasscom.example.anotherapp.MyClassc*.e*.a*.MyClass

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

我可以组合其中的一些,例如使用Log4J android,但是创建一个appender 来使用androlog 框架,但迟早会变得一团糟,应该避免。

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

编辑:如下所述,我可以将例如:log4j-android 与 slf4j 结合使用(如果我将使用 log4j,我更喜欢这样做,因为日志格式支持 ("{}",...) ),但确实如此不回答问题。我必须选择一个框架,然后我可以用 SLF4J 外观装饰它。

4

3 回答 3

13

更好的方法。我想,就是使用SLF4J API + 对其的一些实现。

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

  1. Android Logger是轻量级但易于配置的 SLF4J 实现 (< 50 Kb)。
  2. LOGBack是最强大和优化的实现,但它的大小约为 1 Mb。
  3. 其他任何你喜欢的:slf4jandroidslf4j-android
于 2013-03-19T04:13:23.787 回答
6

检查第一个答案

它说:

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

所以,总结一下:SLF4J 不会取代 log4j,它们是一起工作的。它从您的库/应用程序中删除了对 log4j 的依赖。

于 2012-05-09T10:46:56.627 回答
2

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

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

于 2014-07-29T18:28:13.040 回答