web-dev-qa-db-ja.com

ロギングタグは最大23文字です。

AS 1.1 Preview 2の更新以降、すべてのLogメッセージの下に赤い線が表示されます

Log.d(TAG, "message");

メッセージあり: "ロギングタグは最大23文字です。

Android Studio自体。これはバグですか?

43
TomCB

いいえ、それはバグではありません。

1.1プレビュー2でのAndroid Studioの最近の変更 から

値を解決できる場合、ロギングコールに渡されるタグが最大で23文字の長さであることを確認します(ロギングAPIで必要)。

logging tag was 31

最近の変更で簡単に説明したように、これは Log APIが23文字を超えるタグを許可しないためです。

SLF4J Android に説明があります:

[...]そのようなタグの長さは現在23文字に制限されています(23 = 32-名前空間プレフィックスの場合8-Cターミネーターの場合1)

Androidのソースコード と一致します。

現在、この例外を明示的に言及している関数は Log.isLoggable() のみです。

...

スロー

IllegalArgumentExceptionは、tag.length()> 23の場合にスローされます。

ただし、コメントに基づいて、ロガーはリリースモードで例外をスローするようです(デバッグモードでは無視されます)。

Terence's answer に従ってリントチェックを無効にできますが、警告されています。

37
Andrew T.

必要に応じて無効にすることができます。

Android Studio、Analyze-> Inspect Code。

screenshot

[検査プロファイル]で、3つの水平ドットが付いたボタンをクリックします。

次のウィンドウが開きます。 「log」を検索し、「Too Long Log Tags」のチェックを外します。

screenshot

更新: Android Studio 2.2、以下にありますAndroid Lint:Correctness

screenshot

43
squeeish

@Terenceによる回答の補完

Build.gradleファイルでこれを使用して、gradle経由で特定のチェックをオフにすることもできます。

lintOptions {
    disable 'LongLogTag'
}

または、xmlを使用してlint.xmlファイルをプロジェクトに追加します。

<?xml version="1.0" encoding="UTF-8"?>
<lint>
    <issue id="LongLogTag" severity="ignore" />
</lint>
18
straya

このリントチェックを決して無視することはできません。例外をスローして実行を停止するため、リリースバージョンで予期しない結果をもたらす可能性があります(アプリがクラッシュしません)。

私は最近、ひどい教訓を学びました。デバッグモードでは問題ありませんが、リリースバージョンでは異なる動作をします。

6
Jacky

これは最近の変更です。このビルドでは、新しいリントチェックが行われます。それは言う、

値を解決できる場合、ロギングコールに渡されるタグが最大で23文字の長さであることを確認します(ロギングAPIで必要)。

詳細については、以下のリンクの3番目のポイントをお読みください。

https://sites.google.com/a/Android.com/tools/recent/androidstudio11preview2

これを取得したくない場合は、TAG内の文字数を最小化し、23文字を超えないようにしてください。

4
Vilas

これが起こる理由を説明するには:

AOSPソースコードによると、任意のタグでログを記録できます。問題は_Log.isLoggable_にあります。

_Log.isLoggable_は、記録する優先度が有効になっている場合、システムプロパティ_log.tag.<YOUR_TAG>_をチェックします。このメカニズムのドキュメントは次のとおりです。

public static boolean isLoggable (String tag, int level)

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

ソース: https://developer.Android.com/reference/Android/util/Log#isLoggable(Java.lang.String、%20int)

API 26(Oreo)より下では、システムプロパティキーの制限は31文字でした。そして"log.tag.".length() + 23は31です。以下のように_Log.isLoggable_を呼び出すと、Android 23文字を超えるタグを持つOreoは、 inソースコード 。Android O以降、この制限は適用されません。

Lintルールは、これらすべての(通常)不必要な詳細からユーザーを保護するためだけに存在します。


_Log.isLoggable_のドキュメントには、IllegalArgumentExceptionnotがスローされることも記載されています。API24は私の調査結果によると間違っています。フォロー: https://issuetracker.google.com/issues/124593220

1
Eugen Pechanec