[Kotlin] Local Storage에 logcat파일 만들기
Web Application은 서버에 로그가 남지만 Android 같은 경우에 테스트할 때가 아니면 각각의 디바이스 내에 로그가 생성되어 확인하기가 어렵다.
지금은 ADB를 이용한 Wifi logging이 가능하고 또 온라인 환경에서는 서버로 바로 로그를 보낼 수 있지만..
특히 오프라인 환경에는 더욱 에러트레이스 하기 어렵다.
따라서 앱이 기동되었을 때 로그 파일을 생성할 수 있도록 해보자.
1. AndroidManifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_LOGS"
tools:ignore="ProtectedPermissions" />
세 개의 권한을 부여하자.
2. 함수 생성
fun setLogFile() {
val date = Date(System.currentTimeMillis())
val format = SimpleDateFormat("yyyyMMddhhmmss", Locale.KOREA)
val time: String = format.format(date)
when {
isExternalStorageWritable -> {
//read, write 둘다 가능
val logDir =
File("data/data/com.minggu.myapp/logs")
//logDirectory 폴더 없을 시 생성
if (!logDir.exists())
logDir.mkdirs()
val logFile = File(logDir, "log_$time.txt")
Log.d(LoginActivity.TAG, "New Logging Start :: $logFile")
//이전 logcat 을 지우고 파일에 새 로그을 씀
try {
Runtime.getRuntime().exec("logcat -c")
Runtime.getRuntime().exec("logcat -f $logFile")
} catch (e: IOException) {
e.printStackTrace()
}
//만약 한달 전 로그 있다면 삭제
val deleteFileList = logDir.listFiles()
val cal: Calendar = Calendar.getInstance()
cal.time = Date()
cal.add(Calendar.MONTH, -1)
deleteFileList?.let {
for (file in deleteFileList) {
if (Date(file.lastModified()) < cal.time) {
Log.i(TAG, "Log File deleted : " + file.name)
file.delete()
}
}
}
}
isExternalStorageReadable -> {
//read 만 가능
Log.e(LoginActivity.TAG, "Only Read!")
}
else -> {
//접근 불가능
Log.e(LoginActivity.TAG, "You can't access!")
}
}
}
간단해보이지만 핵심 기능은 다 들어있다.
패키 지명을 가져오는 다양한 방법들이 있는데 원하는 방법을 선택하기로 하자. (난 샘플로 com.minggu.myapp으로 명명)
함수로 만들어두었으니 MainActivity 혹은 SplashActivity 혹은 LoginActivity에 넣어두면 된다.
안드로이드 스튜디오는 내장접근이 가능하니 저렇게 했지만 외부저장소로 빼려면
${Environment.getExternalStorageDirectory()}
을 사용하거나 서버로 바로 보내거나 바로 내보내기 기능을 구현하면 될 듯하다.
'Andorid' 카테고리의 다른 글
[Kotlin] Android bitmap 최적화 (0) | 2022.08.31 |
---|---|
[Kotlin] Android OutOfMemoryError (0) | 2022.08.27 |
[Kotlin] Firebase 연동 & Realtime Database 조작 (0) | 2022.04.03 |
[Android / Java] Cloud Firestore 연동을 통한 Data 조작(feat. RecyclerView) (0) | 2022.03.27 |
[Android] wifi를 통한 무선 디버깅(ADB) (0) | 2022.03.24 |