본문 바로가기
Project/안드로이드 프로젝트(HomingBird)

Android Studio, JAVA, Kotlin ] Debug Log를 찍는 Util

by 김마리님 2020. 11. 6.

(이 게시물을 최종본이 아닙니다. 개발하면서 점점 달라질 수 있으니 참고해주세요 ㅇ.<)

 

-- 첫 게시 : 20.11.06 --

 

 

빠르게 결과물부터 보여드리면 이렇습니다 <<

특히 액티비티의 이동이 많아지면, 일일히 액티비티 이름을 찍을 필요도 없고, 내가 보고 싶은 디버그 코드만 볼 수 있어요.

처음 목적은 디버그 코드를, 앱을 배포할 때 보여지지 않도록 하고 싶었어요. 이것도 다 메모리 낭비잖아요 ^-ㅠ

그래서 다음 블로그를 기반으로 제작했습니다.

gun0912.tistory.com/12

 

[안드로이드/Android]개발할때만 Log 남기는 방법 - Debug Log

저는 안드로이드 개발하면서 디버깅보다는 곳곳에 로그를 남겨두고 예상되는대로 실행이되는지 확인합니다. 혹은 변수값이나 클래스등의 값을 확인하기도 합니다. 로그를 찍을때는 Log.d(TAG,로

gun0912.tistory.com

다만 여기 코드의 경우 는 메세지만 노출하고, 내가 보고 싶은 특정 로그를 찍지 않는 단점이 있어요. 그래서 내가 보고 싶은 값을 출력하는 유틸을 제작했습니다.

 

-.. util / DlogUtil.java

package com.mary.homingbird.util;

import android.util.Log;

public class DlogUtil {
    public static boolean debugMode = true;

    public static final void d(String TAG, Object object) {
        if (debugMode) {
            Log.d(TAG, buildMessage(object));
        }
    }

    private static String buildMessage(Object object) {
        StackTraceElement ste = Thread.currentThread().getStackTrace()[4];

        StringBuilder sb = new StringBuilder();

        sb.append("DlogUtil");
        sb.append(" :: ");
        sb.append(ste.getFileName().replace(".java", ""));
        sb.append(" :: ");
        sb.append(String.valueOf(object));

        return sb.toString();
    }
}

 

이러면 마지막 배포시에 앞의 debugMode 코드만 false로 변경해주면 출력이 되지 않겠죠.

이 때, 우리가 가지고 오는 값이 문자열일지, 정수형일지, 배열일지 알 수 없어서, 받아오는 값을 object로 가져오고, String.valueOf 함수를 이용해서 값을 강제로 문자열로 변환시켜서 StringBuilder에 append 시킵니다.

같은 방식으로 logE나 logi 등도 만들 수 있겠어요~ 하지만 저는 디버그 로그만 필요해서 d만 만든거랍니다.

 

 


 

 

-- 수정 : 21.01.07 --

 

으어 요즘 코틀린도 하니까 코틀린 코드도 첨부하고 갑니다 (쫑쫑)

package com.mary.kotlinprojectstudy.util

import android.util.Log


object DlogUtil {
    var debugMode = true
    fun d(TAG: String?, `object`: Any) {
        if (debugMode) {
            Log.d(TAG, buildMessage(`object`))
        }
    }

    private fun buildMessage(`object`: Any): String {
        val ste = Thread.currentThread().stackTrace[4]
        val sb = StringBuilder()
        sb.append("DlogUtil")
        sb.append(" :: ")
        sb.append(ste.fileName.replace(".java", ""))
        sb.append(" :: ")
        sb.append(`object`.toString())
        return sb.toString()
    }
}

 

반응형