减少ORMlite的内部日志详细程度或禁用它

Axx*_*iss 7 logging android logback logcat ormlite

我们正在我们的应用程序中进行一些重要的性能调整,因此我们开始使用方法跟踪来找到瓶颈.

乍一看,Ormlite很好,但是我们发现,例如在一个需要8ms的查询中,Ormlite的内部日志需要6ms(75%).此外,这些日志调用处于DEBUG级别.

目前我尝试(没有成功)将日志级别设置为ERROR:

  • 用adb: adb shell setprop log.tag.ORMLite ERROR
  • 使用logback: <logger name="com.j256.ormlite" level="ERROR"/>

这是logcat的几行

I/System.out( 4207): 2014-10-01 10:50:14,702 [DEBUG] BaseMappedStatement query-for-id using ...
I/System.out( 4207): 2014-10-01 10:50:14,706 [DEBUG] StatementExecutor executing raw query for ...
I/System.out( 4207): 2014-10-01 10:50:14,709 [DEBUG] SelectIterator starting iterator  @-1593957304 for ...
I/System.out( 4207): 2014-10-01 10:50:14,711 [DEBUG] SelectIterator closed iterator @-1593957304 after 1 rows
I/System.out( 4207): 2014-10-01 10:50:14,714 [DEBUG] BaseMappedStatement query-for-id using ...
I/System.out( 4207): 2014-10-01 10:50:14,717 [DEBUG] BaseMappedStatement query-for-id using ...
I/System.out( 4207): 2014-10-01 10:50:14,718 [DEBUG] StatementBuilder built statement ...
I/System.out( 4207): 2014-10-01 10:50:14,719 [DEBUG] BaseMappedStatement prepared statement ...
Run Code Online (Sandbox Code Playgroud)

这是一个方法跟踪的screnshot

ORMLite方法跟踪

有关如何解决这个问题的任何想法?

Axx*_*iss 10

通过方法跟踪,我们看到正在使用LocalLog.正如LocalLog的文档中所述:

您可以通过设置System.setProperty(LocalLog.LOCAL_LOG_LEVEL_PROPERTY,"trace")来设置日志级别.
可接受的值包括:TRACE,DEBUG,INFO,WARN,ERROR和FATAL.

我们无法使用属性设置,adb shell因此我们将以下行添加到我们的Application.onCreate

System.setProperty(LocalLog.LOCAL_LOG_LEVEL_PROPERTY, "ERROR");
Run Code Online (Sandbox Code Playgroud)

最后,我们停止在logcat上看到ORMLite输出,并且性能按预期增加.

  • 然后,您会使用ProGuard.由于没有直接使用记录器类,ProGuard将它们全部剥离,因此只有LocalLog直接在库代码中引用.我经历了同样的事情,只有在调整ProGuard规则后才能获得所有记录器. (2认同)