我们正在我们的应用程序中进行一些重要的性能调整,因此我们开始使用方法跟踪来找到瓶颈。
乍一看Ormlite很好,但我们发现,例如,在一个需要8ms的查询中,Ormlite的内部日志需要6ms(75%)。此外,这些日志调用处于DEBUG级别。
目前我尝试(没有成功)将日志级别设置为ERROR:
adb shell setprop log.tag.ORMLite ERROR
<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 ...
这是一个方法跟踪的细节
关于如何解决这个问题的任何想法?
答案 0 :(得分:10)
通过方法跟踪,我们看到正在使用LocalLog。正如LocalLog's文档中所述:
您可以通过设置System.setProperty(LocalLog.LOCAL_LOG_LEVEL_PROPERTY,设置日志级别, &#34;跟踪&#34;。)
可接受的值包括:TRACE,DEBUG,INFO,WARN,ERROR和FATAL。
我们无法使用adb shell
设置属性,因此我们将以下行添加到Application.onCreate
System.setProperty(LocalLog.LOCAL_LOG_LEVEL_PROPERTY, "ERROR");
最后,我们停止在logcat上看到ORMLite输出,并且性能按预期增加。
答案 1 :(得分: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>
答案 2 :(得分:0)
Android上的ORMLite文档提到了如何通过adb启用日志:http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite_4.html#Android-Logging
但是,没有提及如何禁用它们。
从@Axxiss答案中,我们可以看到正确的日志级别为ERROR
。
因此,要使用adb禁用日志:
adb shell setprop log.tag.StatementExecutor ERROR
adb shell setprop log.tag.BaseMappedStatement ERROR
adb shell setprop log.tag.MappedCreate ERROR
答案 3 :(得分:0)
您可以直接为 com.j256.ormlite
中的 logback.xml
包设置日志级别:
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<charset>UTF-8</charset>
<pattern>%d{yyyy.MM.dd HH:mm:ss.SSS} %-5level [%thread] [%X{worker_name}] [%logger{36}/%method\(%line\)] - %msg%n</pattern>
</encoder>
</appender>
<!-- log level for ORMLite -->
<logger name="com.j256.ormlite" level="ERROR">
<appender-ref ref="STDOUT"/>
</logger>
<!-- log level for your application -->
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
</configuration>