(안드로이드/코틀린) 로그 릴리즈/디버그 모드 나누기
안드로이드 로그 릴리즈/디버그 모드 나눠서 찍기
안드로이드 개발을 하다보면 로그를 찍어야 값 확인도 가능하고 디버그하는데도 편리하다. 디버그 모드에서 Log.d()를 찍어놓고 릴리즈 버전 때 하나씩 지우려면 상당히 많은 노력이 수반된다. 디버그 모드를 체크하는 로직을 통해 로그를 찍는 것이 코드 관리 및 성능에도 좋다
실습하기
1단계 Utils() 라는 별도의 클래스 만든다
- 모바일 뿐만 아니라 다른 파트의 많은 개발자들이 Utils 클래스를 만들고 그 안에 자주 쓰이는 코드들을 넣고 다니며 프로젝트 개발 속도를 늘린다.
import android.content.Context
import android.content.pm.ApplicationInfo
import android.util.Log
class Utils(context: Context) {
private var TAG = "TEST"
private val isDEBUG =
(context.packageManager.getApplicationInfo(context.packageName, 0).flags
and ApplicationInfo.FLAG_DEBUGGABLE) != 0
fun logD(message: String) {
if (isDEBUG) {
Log.d(TAG, "D MODE $message")
}
}
fun logE(message: String) {
if (isDEBUG) {
Log.e(TAG, "E MODE $message")
}
}
fun logI(message: String) {
if (isDEBUG) {
Log.i(TAG, "I MODE $message")
}
}
fun logW(message: String) {
if (isDEBUG) {
Log.w(TAG, "W MODE $message")
}
}
fun logV(message: String) {
if (isDEBUG) {
Log.v(TAG, "V MODE $message")
}
}
}
- isDEBUG 는 현 프로젝트의 정보가 디버그 모드인지 판단하는 로직으로 TRUE OR FALSE 값을 가진다
- 잘 안쓰는 로그 모드는 취향에 따라 제거해도 된다
2. 액티비티나 프래그먼트에서 사용
- 멤버 변수로 선언하고 사용하려면 lazy 키워드 활용
class MainActivity : AppCompatActivity() {
private val utils: Utils by lazy {
Utils(this)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val navView: BottomNavigationView = findViewById(R.id.nav_view)
val navController = findNavController(R.id.nav_host_fragment)
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
val appBarConfiguration = AppBarConfiguration(setOf(
R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications))
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
var str = "Kotlin"
utils.logD("HI $str")
utils.logI("HI $str")
utils.logV("HI $str")
utils.logE("HI $str")
utils.logW("HI $str")
}
}
결론
- Log.d(“TAG”, “MSG”) 이 방식을 작성하는데 생각보다 손이 너무 많이 가므로 Utils클래스를 통해 효율적으로 코딩하는 것을 추천
- BuildConfig를 활용하여 릴리즈/디버그 모드를 나누는 방법도 존재함