android.util.Logの単純で明白な置き換え

一度、1つのプロジェクトを書きました。 プロジェクトは大規模であることが判明し、私は長い間それを書きました。

押し込むことができるすべてがありました-そして、retrolambda / java8、および数十個

他のライブラリ(新機能に対する顧客の欲望は際限がなかったため、

依存関係の数が増加しました)。



しかし、これはそれについてでさえありません。 リリースを行う時です。 そして、それはプロジェクトで

多くのログがあり、それらをリリースビルドから削除するとよいでしょう。 誰もが知っている

ProGuardを使用したメソッドは、最初は機能しませんでした。 すべての新しい「-keep」で

アプリケーションは新しい場所でクラッシュしました。 したがって、ProGuardは無効にする必要がありました

良い時まで。



この間ずっと、ロギングcのレベルを制御しているという感覚

バイトコードの変更を使用するのはばかげています。 それから30分で

プリミティブロガー。



通常、私はめったに自分のプロジェクトを終わらせることはめったにありませんが、ここではとても簡単でした-今ではgithubにあります; 必要であれば 、それを使用してください。



互換性のあるAPI-簡単な移行



Timberを使用しなかった理由の1つは、指が

Log.dの入力に使用します。 また、クラスを「Log」と呼び、「android.util.Log」と互換性のあるメソッドを作成しました。



これは、標準のロガーから飛び降りたい場合-ちょうど

インポートを置き換えます。 これは、sedを使用するか、お気に入りを使用して実行できます。

IDE



利点は何ですか?



さて、ロガーの主な機能を示すいくつかのコードスニペットがあります。



//          Log.d(tag, "X equals " + x); //          Log.d(tag, "X", x)
      
      







 //     ,        class Foo { public void foo() { Log.d("Hello"); //  'D/Foo: Hello' } } //        "tag" ( "TAG") class Foo { private final static String TAG = "Bar"; public void foo() { Log.d("Hello"); //  'D/Bar: Hello' Log.d(TAG, "Hello"); //  'D/Bar: Hello',  'D/Bar: Bar Hello' } } // ,           class Foo { static { Log.useTags(new String[]{"tag", "TAG", "MYTAG", "_TAG", "iLoveLongFieldName"}); } private final static String _TAG = "Bar"; ... }
      
      







 //   ,     - Exception e = new Exception("foo"); Log.d("Something bad happened", someObject, "error:", e); //       Log .d("First") .d("Second") .d("Third line") //      -     Log.level(Log.I); Log.d("foo"); //    //    ,   String.format() Log.useFormat(true); Log.d("X equals %d", x); //  'X equals 42' //       -      Log.d("Value of X", x); //  'Value of X 42' //     '\n'.    4000 //       .   //   JSON-  HTML Log.d("Hello\nworld"); //  'D/SomeTag: Hello',  'D/SomeTag: world' //     ,    JVM. //       ,    - //  System.out.println //       Log.usePrinter(Log.SYSTEM.true).usePrinter(Log.ANDROID, false).d("hello"); //  System.out,       //      "",   Crashlytics Log.usePrinter(mCrashlyricsPrinter, true);
      
      







どこで入手できますか?



Githubソース: github.com/zserge/log



build.gradleでは、ライブラリは通常どおり接続されます。



 repositories { jcenter() //  mavenCentral() } dependencies { compile 'co.trikita:log:1.1.5' }
      
      





これは、インポートを置き換える方法です。



 $ find -name "*.java" -type f -exec sed -i 's/import android.util.Log/import trikita.log.Log/g' {} \;
      
      







MITで認可されたロガー、健康のために使用。 なしの1つのクラスがあります

依存関係は250行のみであるため、プロジェクトが重くなったり遅くなったりすることはありません。



要望やバグ報告(特にパッチを含む)は大歓迎です!



UPD:コードレビューと建設的なコメントをありがとう。 おかげで、バージョン1.1.5を投稿しました。




All Articles