DUICUO

オープンソースのログライブラリLoggerを使用する

[[172011]]

ログは開発において非常に重要です。デバッグデータの表示、バグの追跡と特定、データ収集と統計、そして日々の運用とメンテナンスまで、あらゆる用途で広く利用されています。

本日は、よく知られているオープンソースのログライブラリであるLoggerの使い方をご紹介します。このライブラリはhttps://github.com/orhanobut/loggerから入手できます。

Android Studio の gradle ファイルにこれを追加すると、ロガー ライブラリを依存関係として参照できるようになります。

  1. 依存関係 {
  2. 'com.orhanobut:logger:1.15'をコンパイルする 
  3. }

Loggerライブラリは以下の機能を提供します

  • スレッド情報
  • クラス情報
  • メソッド情報
  • JSON や XML などの印刷形式。
  • リンクをクリックするとソースコード印刷エリアに移動します。

ロガーの使用

使い方はとても簡単です:

  1. 文字列 userName = "Jerry" ;
  2. Logger.i(ユーザー名);

印刷結果:

対数効果

フォーマットは非常に明確で、スレッド名、メソッド名、メソッドの場所、そして出力情報が表示されます。メソッドの場所をクリックするとその場所にジャンプするので、デバッグが非常に便利です。

上の画像でわかるように、出力されたタグはPRETTYLOGGERです。これはLoggerのデフォルトタグです。変更するには、以下の手順を実行してください。

  1. // 印刷されたタグの値を変更する
  2. Logger.init( "メインアクティビティ" );
  3. 文字列 userName = "Jerry" ;
  4. Logger.i(ユーザー名);

タグのログ効果の変更

「常に1つのタグだけを使いたくない。タグを変更するには何度も `Logger.init(tag)` 呼び出しを書かないといけないのでは?」と考えるユーザーもいるかもしれません。しかし、メソッド名は `init` なので、おそらく開発者は1回だけ使用すれば済むように意図しているのでしょう。その方法は以下の通りです。

  1. Logger.init( "メインアクティビティ" );
  2. 文字列 userName = "Jerry" ;
  3. Logger.i(ユーザー名);
  4. // 現在印刷されているテキストに別のタグ名を付ける
  5. Logger.t( "App" ).i(ユーザー名);
  6. Logger.e(ユーザー名);

個別に変更されたタグ印刷効果

図からわかるように、`Logger.t(tag)` メソッドはタグを変更しますが、後から出力される他のタグには影響を与えません。これは柔軟で便利だと思いませんか?

続けましょう。Androidの組み込みログでは、文字列以外の値や変数オブジェクトを直接出力できないことは周知の事実です。

整数を印刷するシステム組み込み関数がエラーをスローしています。

出力時に文字列を1つの文字列に連結する必要があるため、非常に面倒な場合があります(Androidエンジニアである私も、この精神的苦痛を経験したことがあります)。強力なLoggerを使えば、まさにそれが実現できます。

Logger.i("みなさんこんにちは。私の名前は%sです。今年は%d歳です。私の記事を読んでいただいてとても嬉しいです!!!", "Jerry", 18);

連結されたint値の印刷効果

C言語を学んだことがある人なら、printf("age: %d", 16)という関数をご存知でしょう。見覚えがありますか?これを修正してみましょう。

Logger.t("あなたはまだ16歳ですか?").i("皆さんこんにちは。私の名前は%sです。私は%d歳です。私の記事を読んでくれてとても嬉しいです!!!", "Jerry", 16);

かわいそうな丸太、台無しになってしまったようだ。

これらに加えて、Logger は他の多くの種類のデータも印刷できるため、開発が大幅に容易になります。

  1. Logger.d( "hello" );
  2. Logger.e( "hello" );
  3. Logger.w( "hello" );
  4. Logger.v( "hello" );
  5. Logger.wtf( "hello" );
  6. // JSON形式で出力
  7. 文字列 json = createJson().toString();
  8. Logger.json(json);
  9. // XML形式を印刷
  10. Logger.xml(XML_CONTENT);
  11. // カスタム レベル、タグ、メッセージ、その他の形式でログを出力します。
  12. Logger.log(DEBUG、 "タグ" "メッセージ" 、throwable);
  13.  
  14. // JSONデータを作成する
  15. プライベートJSONオブジェクトcreateJson() {
  16. 試す {
  17. JSONObject person = 新しい JSONObject();
  18. person.put( "電話番号" , "12315" );
  19. JSONObject アドレス = 新しい JSONObject();
  20. address.put( "国" , "中国" );
  21. address.put( "省" , "福建省" );
  22. address.put( "city" , "xiamen" );
  23. person.put( "住所" , 住所);
  24. person.put( "既婚" , true );
  25. 返品者;
  26. } (JSONException e) をキャッチ {
  27. Logger.e(e, "json 作成エラーが発生しました" );
  28. }
  29. 戻る ヌル;
  30. }

美しいJSON形式の印刷効果

JSONの出力に関して、ちょっとした問題がありました。初めて使った時は、長い間何も出力されませんでした。そこでDDMSのLogcatに切り替えましたが、問題は解決しませんでした。その後、ソースコードをトレースしてLogger.json()がどのように出力されているかを確認しました。ソースコードは最終的にシステムのLog.d(tag, msg)を使って出力しています。そこでブレークポイントを設定してデバッグしたところ、画像に示されている形式の文字列はすべてLog.dのmsgに渡されているものの、出力されていないことがわかりました(イライラします!)。そこで、直接以下の操作を行いました。

  1. Log.d( "MainActivity" , "onActivityCreated: log.d はどこに行ったのでしょうか..." );

ログはまだ表示されず、Meizu MX4 端末に問題がある可能性が示されました。Google で簡単に検索したところ、Meizu 端末はデバッグモードでログ出力を有効にしていないため、デフォルトでは Log.d() を使用してログを出力しないことがわかりました。解決策は、「開発者向けオプション」>「高度なログ出力」に移動し、「すべて許可」を選択することです(解決策の記事をご覧ください:http://blog.csdn.net/u013175701/article/details/51428870)。その後、ログが出力されるようになりました。

Logger ライブラリでは、表示をカスタマイズすることもできます。

  1. 設定 setting = Logger.init( "MainActivity" );
  2. setting.logLevel( LogLevel.FULL ) // すべてのログを表示します。LogLevel.NONE を指定するとすべてのログが非表示になります。デフォルトはFull です。     
  3. .methodCount(5) // スタックに出力されるメソッドの数。デフォルトは2
  4. .methodOffset(0) // コールスタックの関数オフセット値を設定します。0の場合、このログを出力する関数からスタック情報が出力されます。デフォルト値は0です。
  5. .hideThreadInfo(); // スレッド情報を非表示にする
  6. .logAdapter(new AndroidLogAdapter()); // カスタムログアダプタを作成します。この例はAndroidのログ出力に適応しています。LogAdapterインターフェースを実装することで、特定のニーズに合わせてログ出力を調整することもできます。

カスタムログ表示

スレッド表示は非表示で、メソッド スタック オフセットは 0 です。これは、ログが印刷されたポイントから数えて、スタック内の 5 つのメソッドすべてが印刷されることを示します。

配列、リスト、マップ、その他のオブジェクトデータを印刷します

  1. String[] names = { "Jerry" , "Emily" , "小五" , "hongyang" , "七猫" };
  2. Logger.d(names); // 文字配列を出力する
  3. リスト<ユーザー> users = 新しい ArrayList<>();
  4. for ( int i = 0; i < names.length; i++) {
  5. ユーザー  user = 新しいユーザー(names[i], 10 + i);
  6. users.add (ユーザー);
  7. }
  8. Logger.d(users); // リストを印刷
  9.  
  10. クラスUser {
  11. プライベート文字列;
  12. プライベートint年齢;
  13. 公共 ユーザー(文字列整数年齢) {
  14. this.name =名前;
  15. this.age = 年齢;
  16. }
  17. パブリック文字列 getName() {
  18. 戻る 名前;
  19. }
  20. パブリックvoid setName(文字列) {
  21. this.name =名前;
  22. }
  23. 公共 年齢を取得する整数() {
  24. 年齢を返します
  25. }
  26. パブリックvoid setAge( int age) {
  27. this.age = 年齢;
  28. }
  29. // 完全なログ情報を出力するには、オブジェクトの toString メソッドをオーバーライドする必要があります。
  30. @オーバーライド
  31. パブリック文字列toString() {
  32. 戻る  「ユーザー{」 +
  33. "name='" +名前+ '\ '' +
  34. ", 年齢=" + 年齢 +
  35. '}' ;
  36. }
  37. }

文字配列とリストを出力します (ユーザーは toString をオーバーライドしません)。


文字配列とリストを出力します (ユーザーはすでに toString をオーバーライドしています)。

Loggerライブラリの使い方の紹介はこれで終わりです。他に面白い機能や詳しい使い方のヒント、より良い提案などがあれば、ぜひコメント欄にお願いします!ご視聴ありがとうございました!

オープンソースのログライブラリLoggerの分析