Android Log.v(), Log.d(), Log.i(), Log.w(), Log.e() - 각 항목을 언제 사용해야 합니까?
른다LogCat
방법은 다음과 같습니다.
Log.v(); // Verbose
Log.d(); // Debug
Log.i(); // Info
Log.w(); // Warning
Log.e(); // Error
각 유형의 로깅을 사용하기에 적합한 상황은 무엇입니까?하지 않을 , 저는그이아의것아그이마것하만실압지것다니않을는것라이을중지요하제로은도것고일미마도간약론의.LogCat
Android Studio 및 Eclipse에서 필터링합니다. 적절한 시간에 적절한 방법을 사용하고 있다는 것을 알게 되면 좋을 것입니다.
역순으로 진행합니다.
로그: 이것은 나쁜 일이 있을 때 사용합니다.캐치 문 안과 같은 곳에 이 태그를 사용합니다.오류가 발생했다는 것을 알고 오류를 기록합니다.
로그.w: 뭔가 수상한 일이 있다고 의심될 때 사용합니다.오류 모드가 완전히 완료되지는 않았지만 예기치 않은 동작에서 복구되었을 수 있습니다.기본적으로 이 기능을 사용하여 예상치 못한 작업을 기록하지만 반드시 오류는 아닙니다."이봐요, 이런 일이 있었는데 이상해요, 조사해 봐야겠어요."
로그.i: 유용한 정보를 로그에 게시할 수 있습니다.예: 서버에 성공적으로 연결한 경우.기본적으로 성공 사례를 보고하는 데 사용합니다.
로그.d: 디버깅 목적으로 사용합니다.프로그램의 정확한 흐름을 기록할 수 있도록 여러 메시지를 인쇄하려면 이 옵션을 사용합니다.변수 값의 로그를 유지하려면 이 값을 사용합니다.
로그.v: 로깅에 완전히 열중하고 싶을 때 사용합니다.어떤 이유로 앱의 특정 부분에 있는 모든 작은 항목을 기록하기로 결정한 경우 Log.v 태그를 사용합니다.
그리고 보너스로...
- 로그.wtf:절대적으로, 끔찍하게, 성스러운 일이 잘못될 때 이것을 사용하세요.절대 받아서는 안 되는 실수를 저지르는 그런 캐치 블록들을 알잖아요...예, 로그를 기록하려면 Log.wtf를 사용합니다.
다른 방법은 우선순위를 나타냅니다.여러분이 열거한 바와 같이, 그들은 가장 중요하지 않은 것에서 가장 중요한 것으로 바뀌고 있습니다.코드의 디버그 로그에 구체적으로 매핑하는 방법은 작업 중인 구성 요소 또는 앱뿐만 아니라 안드로이드가 다양한 빌드 맛(eng, 사용자 디버그 및 사용자)에서 이러한 로그를 처리하는 방법에 따라 다르다고 생각합니다.저는 안드로이드의 네이티브 데몬에서 상당한 양의 작업을 해왔고, 이것이 제가 하는 방식입니다.앱에 직접 적용되지 않을 수도 있지만 공통점이 있을 수도 있습니다.제 설명이 모호하게 들린다면, 이 중 일부는 과학이라기보다는 예술에 가깝기 때문입니다.제 기본 규칙은 최대한 효율적으로 시스템 성능을 저하시키지 않고 구성 요소를 합리적으로 디버그할 수 있도록 보장하고 항상 오류를 확인하고 기록하는 것입니다.
V - 다른 간격으로 또는 내 구성 요소가 처리하는 모든 이벤트에 대한 상태 출력.또한 구성 요소가 수신하거나 보내는 메시지/이벤트 페이로드에 대한 매우 상세한 출력도 가능합니다.
D - 구성 요소 내에서 발생하는 사소한 이벤트와 구성 요소가 받거나 보내는 메시지/이벤트의 페이로드에 대한 세부 정보입니다.
I - 구성 요소가 수신하거나 보내는 메시지/이벤트의 헤더와 구성 요소의 작동에 중요한 페이로드의 중요한 부분.
W - 비정상적이거나 의심스럽지만 반드시 오류는 아닙니다.
E - 오류, 즉 일이 제대로 작동할 때 발생해서는 안 되는 것을 의미합니다.
사람들이 저지르는 가장 큰 실수는 V, D, I와 같은 것들을 과도하게 사용하면서도 W나 E는 절대 사용하지 않는다는 것입니다.정의에 따라 오류가 발생하지 않아야 하거나 매우 드물게 발생해야 하는 경우 메시지를 기록하는 것이 매우 저렴합니다.반면에 누군가가 키를 누를 때마다 Log.i()를 수행하면 공유 로깅 리소스를 남용하는 것입니다.물론 상식을 사용하고 네트워크 오류와 같이 통제할 수 없는 항목이나 엄격한 루프에 포함된 항목에 대해서는 오류 로그를 주의해야 합니다.
메이비 배드
Log.i("I am here");
좋아요.
Log.e("I shouldn't be here");
이 모든 것을 고려하여 코드가 "운영 준비"에 가까울수록 코드의 기본 로깅 수준을 제한할 수 있습니다(알파형 V, 베타형 D, 운영 중 I 또는 운영 중 W가 필요할 수 있음).몇 가지 간단한 사용 사례를 살펴보고 로그를 확인하여 보다 제한적인 필터링을 적용할 때 발생하는 상황을 대부분 이해할 수 있어야 합니다.아래 필터를 사용하여 실행하면 앱이 무엇을 하고 있는지 알 수 있지만 모든 세부 정보를 얻지 못할 수도 있습니다.
logcat -v threadtime MyApp:I *:S
다음과 같은 LOG를 사용할 수 있습니다.
Log.e(String, String) (error)
Log.w(String, String) (warning)
Log.i(String, String) (information)
Log.d(String, String) (debug)
Log.v(String, String) (verbose)
예제 코드:
private static final String TAG = "MyActivity";
...
Log.i(TAG, "MyClass.getView() — get item number " + position);
이 질문은 이미 답변이 되었음에도 불구하고 답변에 누락된 사례가 있는 것 같습니다.
그러므로 저는 제가 "안드로이드 로그 레벨" 블로그 게시물에 쓴 것을 여기에 가져올 것입니다.
장황한
가장 낮은 수준의 로깅입니다.만약 당신이 벌목에 열중하고 싶다면, 당신은 이 수준으로 하세요.언제 Verbose를 사용해야 하는지, 언제 Debug를 사용해야 하는지 이해하지 못했습니다.그 차이는 제게 매우 자의적으로 들렸습니다.Android의 소스 코드를 가리킨 후에야 비로소 이해할 수 있었습니다.¹ "Verbose는 개발 중이 아니면 절대로 애플리케이션으로 컴파일해서는 안 됩니다."이제 개발 중이고 개발 중에 도움이 되는 삭제 가능한 로그를 추가하고자 할 때는 언제든지 상세한 수준을 유지하는 것이 운영에 들어가기 전에 이러한 로그를 모두 삭제하는 데 도움이 될 것입니다.
디버그
디버깅 목적입니다.이것은 생산 중에 있어야 하는 최저 수준입니다.여기에 있는 정보는 개발 중에 도움이 됩니다.대부분 이 로그인 프로덕션을 사용하지 않도록 설정하여 전송되는 정보가 적고 문제가 있는 경우에만 이 로그를 사용하도록 설정합니다.저는 앱이 서버에서 보내고 받는 모든 정보를 디버그에 로그인하고 싶습니다(비밀번호가 기록되지 않도록 주의하세요!!).이것은 버그가 서버나 앱에 있는지 이해하는 데 매우 유용합니다.저는 또한 중요한 기능의 출입에 대한 로그를 작성합니다.
정보
응용프로그램 진행률을 강조하는 정보 메시지입니다.예를 들어 앱 초기화가 완료된 경우.사용자가 활동과 조각 사이를 이동할 때 정보를 추가합니다.각 API 호출을 기록하지만 URL, 상태 및 응답 시간과 같은 약간의 정보만 기록합니다.
경고문
잠재적으로 유해한 상황이 발생했을 때.
이 로그는 제 경험상 까다로운 수준입니다.언제 잠재적인 유해 상황이 발생합니까?일반적으로 정상인지 또는 오류인지 확인합니다.저는 개인적으로 이 정도는 잘 사용하지 않습니다.제가 그것을 사용할 때의 예는 보통 일이 여러 번 발생할 때입니다.예를 들어, 사용자가 잘못된 암호를 3번 이상 가지고 있습니다.그가 비밀번호를 3번 잘못 입력했기 때문일 수도 있고, 우리 시스템에서 허용되지 않는 문자에 문제가 있기 때문일 수도 있습니다.네트워크 연결 문제도 마찬가지입니다.
오류
오류 이벤트.오류가 발생한 후에도 응용 프로그램이 계속 실행될 수 있습니다.예를 들어, null 포인터를 받으면 안 되는 곳에 null 포인터가 있을 수 있습니다.서버의 응답을 구문 분석하는 동안 오류가 발생했습니다.서버에서 오류가 발생했습니다.
WTF(참담한 실패)
치명적인 것은 응용 프로그램을 종료할 수 있는 심각한 오류 이벤트에 대한 것입니다.Android에서 치명적인 것은 실제로 오류 수준이며, 차이점은 전체 스택도 추가된다는 것입니다.
소스 코드는 몇 가지 기본 지침을 제공합니다.
장황성의 관점에서 가장 작은 것부터 대부분의 것까지의 순서는 ERROR, WARN, INFO, DEBUG, VERBOSE입니다.자세한 내용은 개발 중이 아니면 응용프로그램으로 컴파일해서는 안 됩니다.디버그 로그는 에서 컴파일되지만 런타임에 제거됩니다.오류, 경고 및 정보 로그는 항상 유지됩니다.
더 자세히 말하자면, 쿠르티스의 대답은 딱 들어맞습니다.덧붙이자면 다음과 같습니다. 가능 정보 를 인개 가정또는개정않다음기록에 기록하지 INFO
또는 그 이상(WARN
/ERROR
한 기타 이 오염될 수 .) 그렇지 않으면 버그 보고서 또는 로깅을 포함한 모든 항목이 오염될 수 있습니다.
Android Studio 웹 사이트는 최근에 Kurtis의 답변과 함께 유용할 수 있는 다양한 로그 수준에서 어떤 메시지를 예상해야 하는지에 대한 조언을 몇 가지 조언을 제공했습니다.
- 상세 - 모든 로그 메시지를 표시합니다(기본값).
- 디버그 - 개발 중에만 유용한 디버그 로그 메시지와 이 목록에서 낮은 수준의 메시지를 표시합니다.
- 정보 - 일반적인 사용에 대한 예상 로그 메시지와 이 목록에서 낮은 수준의 메시지를 표시합니다.
- 경고 - 아직 오류가 아닌 가능한 문제와 이 목록의 낮은 메시지 수준을 표시합니다.
- 오류 - 오류가 발생한 문제와 이 목록의 메시지 수준이 낮은 문제를 표시합니다.
- Assert(주장) - 개발자가 절대 발생해서는 안 된다고 예상하는 문제를 표시합니다.
이러한 다양한 유형의 로깅의 요점은 앱이 기본적으로 자체 로그를 자체적으로 필터링하도록 하는 것입니다.따라서 Verbose는 앱에 중요한 모든 것을 기록하는 것일 수 있습니다. 그러면 디버그 레벨은 상세 로그의 하위 집합을 기록하고 Info 레벨은 디버그 로그의 하위 집합을 기록합니다.오류 로그로 이동하면 발생했을 수 있는 모든 오류를 기록할 수 있습니다.또한 앱에서 무언가가 실제로 팬에 부딪힐 때를 위한 Fatal이라고 하는 디버그 레벨이 있습니다.
일반적으로 사용자가 옳습니다. 기본적으로 임의적이며 디버그 로그 대 정보, 대 오류 등으로 간주되는 것을 정의하는 것은 사용자에게 달려 있습니다.
언급URL : https://stackoverflow.com/questions/7959263/android-log-v-log-d-log-i-log-w-log-e-when-to-use-each-one
'it-source' 카테고리의 다른 글
마스터가 다운된 경우 Mysql 마스터-마스터 복제 (0) | 2023.08.14 |
---|---|
Oracle SQL: 테이블 이름 대신 사용되는 변수 (0) | 2023.08.14 |
로케일::getDefault()를 기준으로 DateTime 개체를 포맷합니다. (0) | 2023.08.14 |
Action Creator 및 Reducer 없이 React 및 Redux에서 AJAX 호출을 보낼 수 있습니까? (0) | 2023.08.14 |
SQL 서버 테이블에 대량의 텍스트를 저장하는 가장 좋은 방법은 무엇입니까? (0) | 2023.08.14 |