2014-09-30 85 views
6

我们正在做我们的应用中的一些重性能优化,因此我们开始使用方法跟踪找到瓶颈。减少ORMlite内部日志级别或禁用

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

在我曾尝试(没有成功)设置日志级别为ERROR这样的时刻:

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

这是几行from 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 ... 

这里是一个会议的视角HOD跟踪

ORMLite method tracing

如何处理这一点有什么想法?

+0

因此,默认情况下,Android处于INFO日志模式。你是说ORMLite甚至在这个级别上吐出了DEBUG消息吗?或者这是DEBUG日志消息的性能问题,即使它们没有被显示出来? – Gray 2014-10-01 13:48:04

+0

只是为了别人,ORMLite的有关Android日志文档是在这里:http://ormlite.com/docs/android-logging – Gray 2014-10-01 13:48:53

+0

@Gray我增加了一些额外的信息,令人感到奇怪的是,logcat的输出表现为信息(I /系统正。 out),但使用的标签是debug([DEBUG]) – Axxiss 2014-10-01 14:05:25

回答

10

用方法跟踪我们看到正在使用LocalLog。作为LocalLog's文件指出:

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

我们无法设置使用adb shell属性所以我们将以下一行来我Application.onCreate

System.setProperty(LocalLog.LOCAL_LOG_LEVEL_PROPERTY, "ERROR"); 

最后,我们再见面了ORMLite输出上的logcat和业绩增长预期。

+0

Huh。我不知道为什么在Android下使用LocalLog。这只是一个回退。我会将其添加到Android日志文档@Axxiss。谢谢。 – Gray 2014-10-02 14:33:33

+0

@Gray也许是因为我们在一个纯java库中使用ormlite被导入到一个Android项目中。我只是猜测。 – Axxiss 2014-10-02 18:24:52

+2

这种情况发生在您使用ProGuard时。由于没有直接使用记录器类ProGuard将它们全部剥离,因此只有在库代码中直接引用的LocalLog。我也经历过相同的情况,只有在调整ProGuard规则后才能获得所有记录器。 – dant3 2015-02-27 13:38:16

1

对我来说,我用ORMLite在我的项目(不与Android)。我使用logback.xml来配置它。

http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite_5.html

如果没有发现该类然后查找org.apache.log4j.Logger ,如果发现将使用Log4j。

所以我们可以简单地使用logback.xml为波纹管。

<configuration> 
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
     <encoder> 
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> 
     </encoder> 
    </appender> 

    <logger name="com.my.test" level="TRACE" additivity="false"> 
     <appender-ref ref="STDOUT" /> 
    </logger> 

    <root level="INFO"> 
     <appender-ref ref="STDOUT"/> 
    </root> 
</configuration> 
+0

是的,我们已经配置了该文件的ormlite,但它完全忽略了日志就我所记得的水平而言。 – Axxiss 2016-06-28 11:34:28

+0

有一个命令。 “ ”记录器代码首先查找android.util.Log,如果发现将使用Android内部记录器“ 如果您正在执行与android相关的工作,则android.util.Log将是配置的最佳位置。 – 2016-06-30 06:15:53