2014-09-30 15 views
6

Stiamo eseguendo un'intensa regolazione delle prestazioni nella nostra app, quindi iniziamo a utilizzare la traccia del metodo per individuare i colli di bottiglia.Diminuisci la verbosità del registro interno di ORMlite o disabilitalo

A prima vista, Ormlite andava bene, ma abbiamo rilevato che, ad esempio, in una query che richiede 8 ms, 6 ms (75%) erano necessari per il log interno di Ormlite. Inoltre quelle chiamate di registro sono in livello DEBUG.

Al momento ho cercato (senza successo) impostare il livello di log su ERROR in questo modo:

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

Questo sono alcune linee dal 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 ... 

Ecco uno screnshot di met HOD tracciando

ORMLite method tracing

Ogni pensiero su come gestire questo fuori?

+0

Quindi, per impostazione predefinita, Android è in modalità registro INFO. Stai dicendo che ORMLite stava sputando messaggi DEBUG anche a questo livello? O si trattava di un problema di prestazioni con i messaggi di registro di DEBUG anche se non venivano visualizzati? – Gray

+0

Solo per gli altri, i documenti di ORMLite sulla registrazione di Android sono disponibili qui: http://ormlite.com/docs/android-logging – Gray

+0

@Gray Ho aggiunto alcune informazioni extra, Che strano è che l'output logcat appaia come Info (I/Sytem. fuori) ma il tag utilizzato è il debug ([DEBUG]) – Axxiss

risposta

10

Con la traccia del metodo abbiamo visto che LocalLog era in uso. Come è indicato sul LocalLog's documentazione:

È possibile impostare il livello di log impostando lo System.setProperty (LocalLog.LOCAL_LOG_LEVEL_PROPERTY, "traccia").
I valori accettabili sono: TRACCIA, DEBUG, INFO, AVVISO, ERRORE e FATALE.

Non siamo riusciti a impostare la proprietà utilizzando adb shell così abbiamo aggiunto la seguente riga al nostro Application.onCreate

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

Infine abbiamo smettere di vedere l'uscita ORMLite su logcat e prestazioni aumentata come previsto.

+0

Huh. Non sono sicuro del motivo per cui LocalLog è stato utilizzato su Android. È solo una ripiego. Lo aggiungerò ai documenti di registrazione di Android @Axxiss. Grazie. – Gray

+0

@Gray Forse è perché usiamo ormlite in una libreria java pura che viene importata in un progetto Android. Sto solo indovinando. – Axxiss

+2

Questo succede quando usi ProGuard. Poiché non esiste un uso diretto delle classi di logger, ProGuard li rimuove tutti, e quindi c'è solo LocalLog a cui viene fatto riferimento direttamente nel codice della libreria. Ho sperimentato lo stesso, e ho ottenuto tutti i logger solo dopo aver modificato le regole di ProGuard. – dant3

1

Per me ho utilizzato ORMLite nel mio progetto (non con Android). lì ho usato il logback.xml per configurarlo.

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

Se quella classe non viene trovata sembra poi per org.apache.log4j.Logger e se trovato utilizzerà Log4j.

Quindi possiamo semplicemente utilizzare logback.xml come muggito.

<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

Sì, avevamo già configurato ormlite con quel file ma ignorava completamente il registro livello per quanto mi ricordo. – Axxiss

+0

C'è un ordine. "Il codice logger cerca prima il file android.util.Log e, se trovato, utilizzerà il logger interno Android" Se si sta lavorando su Android, android.util.Log sarebbe il posto migliore da configurare. –

Problemi correlati