본문 바로가기
개발

안드로이드 스튜디오, 코틀린: The logging tag can be at most 23 characters, was 24 (SecondActivity_Lifrcycle) 태그 23자 제한?

by kks950115 2023. 12. 15.
728x90

액티비티의 라이프 사이클 흐름을 보기 위해서 로그를 보려는데 

The logging tag can be at most 23 characters, was 24 (SecondActivity_Lifrcycle)

라는 빨간 경고창이 뜬다. 

태그가 23자를 넘으면 안된다니 이게 뭔 소린가 찾아봤더니 역시 그 곳에는 나랑 똑같은 경험을 한 사람이 있었다...

 

내가 한 뻘짓은 이미 예전에 다른 사람이 했던 뻘짓이다.

 

https://stackoverflow.com/questions/28168622/the-logging-tag-can-be-at-most-23-characters

 

The logging tag can be at most 23 characters

Since update AS 1.1 Preview 2, I'm getting red lines under all my Log messages Log.d(TAG, "message"); With message: "The logging tag can be at most 23 characters..". I didn't update anything

stackoverflow.com

글이 좀 예전글이다.

현재는 태그의 길이가 23 이상이여도 잘 돌아간다.

원인이 무엇인지 설명하기 전에 알아둬야할 사항이 있다.

 

API 26(Oreo) 미만에서는 시스템 속성 키의 제한이 31자였다고 한다.

왜 31인지는 모르겠다. 

tmi로 본문과는 전혀 관련없는 얘기지만... 예전에 스타크래프트를 하면서 최대 데미지가 65535인 게 의문이었다. 65535를 넘으면 데미지가 65535를 뺀만큼 줄어들어서  이상하다 생각했었다.

알고보니 데미지 표기를 16비트로 표기해서 .(2^16 - 1) 이 65535였고 여기서 더 추가되면 오버플로가 일어나는거였다....

혹시 31인것도 비슷한 문제인건가?

 

즉 API 25 이하의 버젼에서 일어나던 문제였고 지금은 상관없다.

 

Log.isLoggable 이라는 메소드가 문제였다.

#define LOG_NAMESPACE "log.tag."

static jboolean isLoggable(const char* tag, jint level) {
    String8 key;
    key.append(LOG_NAMESPACE); // 아마 이 부분이 문제인듯 'log.tag.'은 길이8
    key.append(tag);  			// 최대값이 31이니까 그 뒤에 붙는 태그는 23이하여야 한다.
    char buf[PROPERTY_VALUE_MAX];
    if (property_get(key.string(), buf, "") <= 0) {
        buf[0] = '\0';
    }
    int logLevel = toLevel(buf);
    return logLevel >= 0 && level >= logLevel;
}

key에다가 네임 스페이스를 더하고 태그를 더하는데  log.tag.의 길이가 8이라서 , 그 뒤에 올 태그의 글자 제한이 생겼다라고 설명하고 있었다. 

 

주의할 점은 디버깅 모드랑 릴리즈 모드에서 동작이 다르다는 것이다. 

 

디버깅 모드에서는 문제없이 동작하는데 릴리즈 모드에서는 예외를 일으키면서 동작을 중지한다고 한다.

 

다시금 강조하지만 최신 버젼에서는 걱정하지 않아도 된다.

728x90
반응형

댓글