애플리케이션을 실행할 때 둘 이상의 활동 클래스가 있을 수 있다
어떤 활동 클래스가 정보를 기록했는지 구별하기 위해
클래스 이름을 나타내는 를 logcat사용한다 TAG
급한 사람은
// private static final String TAG = "MainActivity";
private final String TAG = this.getClass().getSimpleName().trim().substring(0, 22);
Log.v(TAG ,"onClick : " + mailServer);
안드로이드 스튜디오에서 로그를 찍으려면
파라미터가 여러 개 필요하단다
Log Class를 한번 훔쳐보도록 하겠다
나는 영어를 잘 몰라서 번역을 해놓았다
/*
* Copyright (C) 2006 The Android Open Source Project
*//* Copyright (C) 2006 안드로이드 오픈소스 프로젝트
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*//Apache 라이센스 버전 2.0("라이센스")에 따라 라이센스가 부여되었습니다.
* 라이센스를 준수하는 경우를 제외하고는 이 파일을 사용할 수 없습니다.
* 라이센스 사본은 다음에서 얻을 수 있습니다.
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
//해당 법률에서 요구하거나 서면으로 동의하지 않는 한,
라이센스에 따라 배포되는 소프트웨어는 * 명시적이든 묵시적이든 어떠한 종류의 보증이나
조건 없이 "있는 그대로" 배포됩니다. * 라이센스에 따른 허가 및 제한 사항을 관리하는
특정 언어는 라이센스를 참조하십시오.
package android.util;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.UnknownHostException;
/**
* Mock Log implementation for testing on non android host.
*/* 안드로이드가 아닌 호스트에서 테스트하기 위한 모의 로그 구현.
public final class Log {
/**
* Priority constant for the println method; use Log.v.
*/
public static final int VERBOSE = 2;
/**
* Priority constant for the println method; use Log.d.
*/
public static final int DEBUG = 3;
/**
* Priority constant for the println method; use Log.i.
*/
public static final int INFO = 4;
/**
* Priority constant for the println method; use Log.w.
*/
public static final int WARN = 5;
/**
* Priority constant for the println method; use Log.e.
*/
public static final int ERROR = 6;
/**
* Priority constant for the println method.
*/
public static final int ASSERT = 7;
private Log() {
}
/**
* Send a {@link #VERBOSE} log message.
* @param tag Used to identify the source of a log message. It usually identifies
* the class or activity where the log call occurs.
* @param msg The message you would like logged.
*/
public static int v(String tag, String msg) {
return println(LOG_ID_MAIN, VERBOSE, tag, msg);
}
/**
* Send a {@link #VERBOSE} log message and log the exception.
* @param tag Used to identify the source of a log message. It usually identifies
* the class or activity where the log call occurs.
* @param msg The message you would like logged.
* @param tr An exception to log
*/
public static int v(String tag, String msg, Throwable tr) {
return println(LOG_ID_MAIN, VERBOSE, tag, msg + '\n' + getStackTraceString(tr));
}
/**
* Send a {@link #DEBUG} log message.
* @param tag Used to identify the source of a log message. It usually identifies
* the class or activity where the log call occurs.
* @param msg The message you would like logged.
*/
public static int d(String tag, String msg) {
return println(LOG_ID_MAIN, DEBUG, tag, msg);
//{@link #DEBUG} 로그 메시지를 보냅니다.
* @param 태그 로그 메시지의 소스를 식별하는 데 사용됩니다.
* 일반적으로 로그 호출이 발생하는 클래스나 활동을 식별합니다.
* @param msg 기록하려는 메시지입니다.
*/ public static int d(String tag, String msg)
{ return println(LOG_ID_MAIN, DEBUG, tag, msg);
}
/**
* Send a {@link #DEBUG} log message and log the exception.
* @param tag Used to identify the source of a log message. It usually identifies
* the class or activity where the log call occurs.
* @param msg The message you would like logged.
* @param tr An exception to log
///** * {@link #DEBUG} 로그 메시지를 보내고 예외를 기록합니다.
* @param 태그 로그 메시지의 소스를 식별하는 데 사용됩니다. 일반적으로 식별
* 로그 호출이 발생하는 수업이나 활동. * @param msg 기록하려는 메시지입니다.
* @param tr 로그에 대한 예외
*/
public static int d(String tag, String msg, Throwable tr) {
return println(LOG_ID_MAIN, DEBUG, tag, msg + '\n' + getStackTraceString(tr));
}
/**
* Send an {@link #INFO} log message.
* @param tag Used to identify the source of a log message. It usually identifies
* the class or activity where the log call occurs.
* @param msg The message you would like logged.
//{@link #INFO} 로그 메시지를 보냅니다.
* @param 태그 로그 메시지의 소스를 식별하는 데 사용됩니다.
* 일반적으로 로그 호출이 발생하는 클래스나 활동을 식별합니다.
* @param msg 기록하려는 메시지입니다.
*/
public static int i(String tag, String msg) {
return println(LOG_ID_MAIN, INFO, tag, msg);
}
/**
* Send a {@link #INFO} log message and log the exception.
* @param tag Used to identify the source of a log message. It usually identifies
* the class or activity where the log call occurs.
* @param msg The message you would like logged.
* @param tr An exception to log
//* {@link #INFO} 로그 메시지를 보내고 예외를 기록합니다.
* @param 태그 로그 메시지의 소스를 식별하는 데 사용됩니다.
* 일반적으로 로그 호출이 발생하는 클래스나 활동을 식별합니다.
* @param msg 기록하려는 메시지입니다. * @param tr 로그에 대한 예외
*/
public static int i(String tag, String msg, Throwable tr) {
return println(LOG_ID_MAIN, INFO, tag, msg + '\n' + getStackTraceString(tr));
}
/**
* Send a {@link #WARN} log message.
* @param tag Used to identify the source of a log message. It usually identifies
* the class or activity where the log call occurs.
* @param msg The message you would like logged.
//* {@link #WARN} 로그 메시지를 보냅니다.
* @param 태그 로그 메시지의 소스를 식별하는 데 사용됩니다.
* 일반적으로 로그 호출이 발생하는 클래스나 활동을 식별합니다.
* @param msg 기록하려는 메시지입니다.
*/
public static int w(String tag, String msg) {
return println(LOG_ID_MAIN, WARN, tag, msg);
}
/**
* Send a {@link #WARN} log message and log the exception.
* @param tag Used to identify the source of a log message. It usually identifies
* the class or activity where the log call occurs.
* @param msg The message you would like logged.
* @param tr An exception to log
//{@link #WARN} 로그 메시지를 보내고 예외를 기록합니다.
* @param 태그 로그 메시지의 소스를 식별하는 데 사용됩니다.
* 일반적으로 로그 호출이 발생하는 클래스나 활동을 식별합니다.
* @param msg 기록하려는 메시지입니다. * @param tr 로그에 대한 예외
*/
public static int w(String tag, String msg, Throwable tr) {
return println(LOG_ID_MAIN, WARN, tag, msg + '\n' + getStackTraceString(tr));
}
/*
* Send a {@link #WARN} log message and log the exception.
* @param tag Used to identify the source of a log message. It usually identifies
* the class or activity where the log call occurs.
* @param tr An exception to log
//* {@link #WARN} 로그 메시지를 보내고 예외를 기록합니다.
* @param 태그 로그 메시지의 소스를 식별하는 데 사용됩니다.
* 일반적으로 로그 호출이 발생하는 클래스나 활동을 식별합니다.
* @param tr 로그에 대한 예외
*/
public static int w(String tag, Throwable tr) {
return println(LOG_ID_MAIN, WARN, tag, getStackTraceString(tr));
}
/**
* Send an {@link #ERROR} log message.
* @param tag Used to identify the source of a log message. It usually identifies
* the class or activity where the log call occurs.
* @param msg The message you would like logged.
//* {@link #ERROR} 로그 메시지를 보냅니다.
* @param 태그 로그 메시지의 소스를 식별하는 데 사용됩니다.
* 일반적으로 로그 호출이 발생하는 클래스나 활동을 식별합니다.
* @param msg 기록하려는 메시지입니다.
*/
public static int e(String tag, String msg) {
return println(LOG_ID_MAIN, ERROR, tag, msg);
}
/**
* Send a {@link #ERROR} log message and log the exception.
* @param tag Used to identify the source of a log message. It usually identifies
* the class or activity where the log call occurs.
* @param msg The message you would like logged.
* @param tr An exception to log
//* {@link #ERROR} 로그 메시지를 보내고 예외를 기록합니다.
* @param 태그 로그 메시지의 소스를 식별하는 데 사용됩니다.
* 일반적으로 로그 호출이 발생하는 클래스나 활동을 식별합니다.
* @param msg 기록하려는 메시지입니다. * @param tr 로그에 대한 예외
*/
public static int e(String tag, String msg, Throwable tr) {
return println(LOG_ID_MAIN, ERROR, tag, msg + '\n' + getStackTraceString(tr));
}
/**
* Handy function to get a loggable stack trace from a Throwable
* @param tr An exception to log
* Throwable에서 로그 가능한 스택 추적을 가져오는 편리한 함수
* @param tr 로그에 대한 예외
*/
public static String getStackTraceString(Throwable tr) {
if (tr == null) {
return "";
}
// This is to reduce the amount of log spew that apps do in the non-error
// condition of the network being unavailable.
// 이는 네트워크를 사용할 수 없는
// 오류가 아닌 조건에서 앱이 수행하는 로그 유출량을 줄이기 위한 것입니다.
Throwable t = tr;
while (t != null) {
if (t instanceof UnknownHostException) {
return "";
}
t = t.getCause();
}
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
tr.printStackTrace(pw);
pw.flush();
return sw.toString();
}
/**
* Low-level logging call.
* @param priority The priority/type of this log message
* @param tag Used to identify the source of a log message. It usually identifies
* the class or activity where the log call occurs.
* @param msg The message you would like logged.
* @return The number of bytes written.
//낮은 수준의 로깅 호출.
* @param Priority 이 로그 메시지의 우선순위/유형
* @param 태그 로그 메시지의 소스를 식별하는 데 사용됩니다.
* 일반적으로 로그 호출이 발생하는 클래스나 활동을 식별합니다.
* @param msg 기록하려는 메시지입니다. * @return 쓴 바이트 수입니다.
*/
public static int println(int priority, String tag, String msg) {
return println(LOG_ID_MAIN, priority, tag, msg);
}
/** @hide */ public static final int LOG_ID_MAIN = 0;
/** @hide */ public static final int LOG_ID_RADIO = 1;
/** @hide */ public static final int LOG_ID_EVENTS = 2;
/** @hide */ public static final int LOG_ID_SYSTEM = 3;
/** @hide */ public static final int LOG_ID_CRASH = 4;
/** @hide */ @SuppressWarnings("unused")
public static int println(int bufID,
int priority, String tag, String msg) {
return 0;
}
}
각 Log Level 이 존재하고 앞 글자를 따서 메서드 이름으로 사용하고 있다.
공통적으로 String tag를 파라미터로 받는데
이 부분이 로그 찍을 때 어디서 로그를 찍었는데 나타내는 용도로 이용된다.
보통 많은 사람들이 Class를 만들고 첫 줄에 다음과 같은 코드를 작성할 것이다.
https://developer.android.com/reference/android/util/Log#constants_1
Log | Android Developers
developer.android.com
그러나 Rename 등의 Refactoring 과정을 거친다면 하드코딩된 부분은 매뉴얼로 수정할 수밖에 없다.
그러나 다음과 같은 방법으로 이용할 수 있다.
private final String TAG = this.getClass().getSimpleName().trim().substring(0, 22);
해당 getClass(). getName() 은 패키지 경로까지 다 나타내므로 getSimpleName()을 이용하고
trim()으로 공백도 제거해준다. 그리고 가장 중요한 것은... Log의 String tag length는 23 이하여야 한다.
그래서 substring으로 22까지 줬다. 이게 바로 간편하고 심플한 방법이다.
그러나.. 당최 왜 23 이하로 써야 하는지 모르겠다..
따라서 다시 구글링 ㄱㄱ 그리고 한 답변을 발견했다.
Below API 26 (Oreo) the limit of system property keys was 31 characters. And "log.tag.".length() + 23 equals 31. If you call Log.isLoggable below Android Oreo with a tag longer than 23 characters it will throw, as described in the source code. Since Android O this limit no longer applies.
결국 오레오 이하의 버전을 위한 조치였군.. 호환성을 생각해야 하는 안드로이 드니까.. 오레오가 deprecated 될 정도로 오랜 시간이 지나면 안 써도 되겠군..
Log ~ () 를 사용합니다. 종류로는
총 다섯가지의 종류가 있습니다. 기본적으로 1번 째 인자 : 태그 / 2번 째 인자 : 로그 내용 을 넣습니다.
v는 Verbose 주석같은 느낌 / i는 Info(정보) / d는 Debug(디버그) / w는 Warning(경고) / e는 Error(오류)입니다.
'Android' 카테고리의 다른 글
D/NetworkSecurityConfig: No Network Security Config specified, using platform default HTTP 통신 오류 (0) | 2023.11.07 |
---|---|
안드로이드 애뮬레이터 duplicate , Wipe Data , cold boot now , show on Disk ,delete (0) | 2023.10.08 |
안드로이드 인터넷 퍼미션 설정 허용 권한 부여 (0) | 2023.09.17 |
안드로이드 - 로그인, 회원가입 간단 구현하기 (mysql, php 이용) (0) | 2023.09.15 |
안드로이드 에뮬레이터 검은 화면 나올 때 (0) | 2023.09.06 |