2012-04-05 11 views
2

の詳細ロギングあなたはAndroid Devにあなたをログ記録のドキュメントを検索した場合の冗長性の面で順以上から、ほとんどのアンドロイド

を読み込む部分があるが、ERRORで、WARN、INFO、DEBUG、VERBOSE。 Verboseは開発中以外はアプリケーションにコンパイルしないでください。デバッグログはコンパイルされますが、実行時に削除されます。エラー、警告、情報ログは常に保持されます。

このメッセージの2番目の部分は、現在私を混乱させるものです。それは私が前に検索と置換が解放すること)、具体的にデバッグではない提案されたよう

a)は、コンパイラのオプティマイザは自動的に

または

B)(すべての冗長ログを取り除きことを意味していますすべてのLog.v()と ""

私は完全に同意するエンドユーザーには冗長なログは望ましくないことを認識していますが、開発ログ中は可能な限り活用するべきだと私は考えています。私は、しかし、これはまだ(それが時間をコンパイルする前に取り除くことを意味と仮定)の提案に違反し、私は理論的には

if(IS_VERBOOSE_LOGGING_ENABLED) 
{ 
    Log.v("My log message here"); 
} 

の線に沿って何かを行うことができます実現します。

コミュニティーの説明があれば、大歓迎です。

+1

あり、http://stackoverflow.com/questions/2446248/remove-all-debug-logging-calls-before-publishing-are-there-tools-to-doを参照してください - this?lq = 1明らかに、これらの呼び出しは、リリース版ではデフォルトで取り除かれることはありません。あなたは常にあなたが提案したようにログに記録する前に、ログレベルをチェックする必要があります。 Log.isLoggable(Log.VERBOSE)は、IS_Verbose__logging_enabledの代わりになる可能性があります。 http://developer.android.com/reference/android/util/Log.html#isLoggable%28java.lang.String,%20int%29 – OneWorld

答えて

2

リリースアーチファクトのすべてのログを取り除くためにproguardを設定するのが最善の方法です。それで、心配する必要は全くありません。その上で大きな議論が

# get rid of all the logging 
-assumenosideeffects class android.util.Log { 
    public static int v(...); 
    public static int d(...); 
    public static int w(...); 
    public static int i(...); 
} 
+2

ただし、スタックトレースの行番号は一致しません。 – lzap

+0

@lzap ProGuardを使用している場合は、この設定が追加されているかどうかに関係なく、スタックトレースの行番号が一致しません。 – Felix

+0

そして、もしあなたがproguardの実行からマッピングファイルを保存するならば、それをdeobfuscateすることができます... –

関連する問題