8

私は gradle/maven 経由で slf4j-android 1.6.1-RC1 を使用しています。Log.debug を呼び出すと、エミュレータでアプリケーションを実行すると、Android Studio 0.3.5 の Logcat に何も表示されません。

楽しみのために、次のことを試しました。

private final Logger Log = LoggerFactory.getLogger(MainActivity.class);
        ...
Log.debug("Got this far, woohoo!");
android.util.Log.d("blah","I am here!");

Log.d の出力は Logcat に表示されましたが、Log.debug には表示されませんでした。

Log.isDebugEnabled() を確認しましたが、十分に false に設定されています。しかし、 android.util.Log.d がうまく動作するので、それは奇妙に思えます。slf4j は同じログ レベルを使用するべきではありませんか? 実際、slf4j は隠れて android.util.Log を呼び出すだけでよいのではないでしょうか?

また、Log.debug を Log.error に置き換えたところ、うまくいきました。したがって、問題は、Log.d がデバッグ イベントを発行しても、デバッグ イベントを発行すべきではないと slf4j が何らかの方法で決定したことにあるようです。

android.util.Log のように、slf4j が Android Studio の Logcat で設定されたログ レベルを尊重するようにするにはどうすればよいですか?

4

4 に答える 4

6

slf4j-android のソースを見るとandroid.util.Log#isLoggable、ログ エントリを作成するかどうかを決定するために呼び出していることがわかります。のjavadocにisLoggableは次のように書かれています(私の強調):

指定されたタグのログが指定されたレベルでログ可能かどうかを確認します。タグのデフォルトレベルは INFO に設定されています。これは、INFO を含むすべてのレベルがログに記録されることを意味します。ロギング メソッドを呼び出す前に、タグをログに記録する必要があるかどうかを確認する必要があります。システム プロパティを設定することで、デフォルト レベルを変更できます。' level は、VERBOSE、DEBUG、INFO、WARN、ERROR、ASSERT、または SUPPRESS のいずれかです。SUPPRESS は、タグのすべてのロギングをオフにします。また、「log.tag.=」を含む local.prop ファイルを作成し、それを /data/local.prop に配置することもできます。

したがって、デフォルトでは slf4j を呼び出しLogger.debugても何もしません。一方、android.util.Log.dは呼び出さないisLoggableため、ログ エントリが作成されます。

javadoc に記載されているオプションはいずれも口に合うものではなく、むしろ slf4j のLogger.debug有用性が低くなります。ロガーが無視するようにプログラムで構成できればいいのですが、isLoggableこれを書いている時点ではできません。

Log.isLoggable は間違った値を返しますか?も参照してください。

于 2014-06-14T08:00:14.233 に答える
1

このバージョンの方がはるかに使いやすいことがわかりました: http://noveogroup.github.io/android-logger/

構成ファイルで目的のログ レベルをandroid-logger.properties設定できます。Logcat ログ レベルを正確に尊重しているわけではありませんが、少なくともsetpropslf4j-android を使用しているときにいじらずにデバッグ メッセージを表示できます。

于 2014-07-25T09:19:31.410 に答える
0

https://github.com/mvysny/slf4j-handroid (開発段階でデバッグ メッセージをログに記録する特別なフォーク)も使用できます。また、特定の例外をログに記録しない Android Studio 1.5 のバグの回避策も含まれています。

于 2015-11-26T07:42:52.463 に答える