일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 넷플릭스
- 명언모음
- 오픈소스
- androidx
- DART
- 공자명언
- ASMR
- 이모지
- Freesound
- jetpack compose
- 소울칼리버6
- Android
- kotlin
- 이모지메모
- 파이썬
- 공부집중
- Coroutine
- Firebase
- 벤자민플랭클린
- Flutter
- FSM
- 코틀린
- Streaming
- bash
- 좋은글필사하기
- 장자명언
- 1인개발자
- Linux
- recyclerview
- 명심보감
Archives
- Today
- Total
Vintage appMaker의 Tech Blog
[Android] Logcat 소스와 연동(링크)하기 본문
Source code or Tip/Android(Java, Kotlin)
[Android] Logcat 소스와 연동(링크)하기
VintageappMaker 2021. 12. 29. 21:22
Android를 개발하다보면 logcat을 많이 사용하게 된다. 그러다보니 수많은 로그를 출력하게 되는데, 정작, 그 로그를 보면서 "어디 소스에서 출력한 것이지?"하며 찾을 때가 있다. 그럴 경우, Android Studio에서는 2가지 기능으로 소스와 연동할 수 있는 데, 하나는 logcat 화면에서 소스와 연동할 수 있는 포멧으로 링크를 출력하는 것이고 나머지는 현재 실행되는 Thead의 stack 정보를 이용하여 소스와 클래스와 함수 정보를 출력하는 것이다.
1. Android Studio의 logcat 화면에서 (파일명:라인번호)로 문자열을 출력하면 클릭 시, 소스로 이동가능
2. Thread.currentThread().stackTrace 배열의
fileName
methodName
className
lineNumber
를 이용하여 현재 소스정보를 출력가능
아래는 위의 정보를 이용하여 logcat을 출력하는 클래스이다.
class DUtil{
companion object{
// 확장함수와 class외에서 정의된 함수에서는
// me에 패키지명(= 패키지명.파일명)을 직접 입력해주어야 한다.
val tag = "DUTIL"
fun d(me : String = "" , sLog : String){
if (true && !BuildConfig.DEBUG) {
return
}
for (i in Thread.currentThread().stackTrace.indices) {
val fileName = Thread.currentThread().stackTrace[i].fileName
val functionName = Thread.currentThread().stackTrace[i].methodName
val className = Thread.currentThread().stackTrace[i].className
val lineNumber = Thread.currentThread().stackTrace[i].lineNumber
// me가 없으면 로그만 찍기
if(me == ""){
Log.v(tag, sLog)
return
}
// 클래스명이 일치하지않으면 다음스택
val clsTag = me.replace("class ", "")
if(className.indexOf(clsTag) < 0 ) continue
// (파일이름:줄번호) 형태로 출력하면
// Android Studio의 logcat에서 링크가 생성됨
var s = sLog
s = "($fileName:$lineNumber) $functionName(): $s"
Log.v(tag, s)
// 최초 1회만 출력 후 종료
return
}
}
}
}
사용법은 다음과 같다.
fun d(me : String = "" , sLog : String)
첫번째 파라메터(me)는 클래스 정보이다. 만약 class안에서 실행한다면 다음과 같이
this.javaClass.toString()을 넘기면 된다. 그리고 두번째 파라메터는 출력할 문자열이다.
그리고 class안에 정의되지 않은 함수나 확장함수일 경우는 패키지명 + 파일명으로 첫번째 파라메터(me)에 넘기게 되면 사용가능하다.
'Source code or Tip > Android(Java, Kotlin)' 카테고리의 다른 글
[링크] Android Espresso 자료모음 (0) | 2022.03.20 |
---|---|
[Android] 화면캡쳐 방지 (0) | 2022.01.10 |
[Webview] 웹뷰에서 fileupload 구현하기 (0) | 2021.10.03 |
Glide를 TextView에서 사용하기 (0) | 2021.09.21 |
WebView에서 javascript 에러가 발생할 때 (0) | 2021.09.18 |
Comments