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

时间:2014-09-30 19:47:01

标签: android logging logcat logback ormlite

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

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

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

  • adb:adb shell setprop log.tag.ORMLite ERROR
  • with 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 ...

这是一个方法跟踪的细节

ORMLite method tracing

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

4 个答案:

答案 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>