Android 는 자신의 LOG 정 보 를 실현 합 니 다.

8760 단어 AndroidLOG
프로그램 개발 과정 에서 LOG 는 프로그램 실행 과정 을 기록 하 는 데 널리 사용 되 는 메커니즘 으로 프로그램 디 버 깅 에 도 사용 할 수 있 고 제품 운영 중의 이벤트 기록 에 도 사용 할 수 있다.안 드 로 이 드 시스템 에 서 는 개발 자가 편리 하 게 사용 할 수 있 도록 간단 하고 편리 한 LOG 메커니즘 을 제공한다.이 글 에서 우 리 는 Android 커 널 공간 과 사용자 공간 에서 LOG 의 사용 과 보기 방법 을 간단하게 소개 합 니 다.
        1.커 널 개발 시 LOG 의 사용Android 커 널 은 Linux Kerne 2.36 을 기반 으로 하기 때문에 Linux Kernel 의 LOG 체 제 는 Android 커 널 에 도 적합 합 니 다.이것 은 바로 유명한 printk 로 C 언어의 printf 와 함께 유명 합 니 다.printf 와 유사 하 게 printk 는 포맷 된 입력 기능 을 제공 하 는 동시에 모든 LOG 메커니즘 의 특징 을 가지 고 있 습 니 다.로그 단계 의 지나친 기능 을 제공 합 니 다.printk 는 8 가지 로그 단 계 를 제공 합 니 다():

#define KERN_EMERG "<0>"  /* system is unusable   */ 
#define KERN_ALERT "<1>"  /* action must be taken immediately */ 
#define KERN_CRIT "<2>"  /* critical conditions   */ 
#deinfe KERN_ERR "<3>"  /* error conditions   */ 
#deinfe KERN_WARNING "<4>"  /* warning conditions   */ 
#deinfe KERN_NOTICE "<5>"  /* normal but significant condition */ 
#deinfe KERN_INFO "<6>"  /* informational   */ 
#deinfe KERN_DEBUG "<7>"  /* debug-level messages   */ 
       printk 사용 방법:
       printk(KERN_ALERT"This is the log printed by printk in linux kernel space.");
       KERN_ALERT 는 로그 단 계 를 표시 합 니 다.뒤에 포맷 할 문자열 이 바짝 붙 어 있 습 니 다.
       Android 시스템 에서 printk 가 출력 한 로그 정 보 는/proc/kmsg 에 저 장 됩 니 다./proc/kmsg 의 내용 을 보 려 면Android 커 널 소스 는 Ubuntu 에서 다운로드,컴 파일,설치문 서 를 참조 하여 배경 에서 시 뮬 레이 터 를 실행 하 십시오.
       USER-NAME@MACHINE-NAME:~/Android$ emulator &
       adb 셸 도구 시작:
       USER-NAME@MACHINE-NAME:~/Android$ adb shell
       /proc/kmsg 파일 보기:
       root@android:/ # cat  /proc/kmsg
        2.사용자 공간 프로그램 개발 시 LOG 사용Android 시스템 은 사용자 공간 에서 경량급 logger 로그 시스템 을 제공 합 니 다.커 널 에서 이 루어 진 장치 구동 으로 사용자 공간의 logcat 도구 와 함께 사용 하면 디 버 깅 프로그램 을 편리 하 게 추적 할 수 있 습 니 다.안 드 로 이 드 시스템 에 서 는 각각 C/C++와 자바 언어 에 두 가지 서로 다른 logger 접근 인 터 페 이 스 를 제공 합 니 다.C/C++로그 인 터 페 이 스 는 일반적으로 하드웨어 추상 층 모듈 을 작성 하거나 JNI 방법 을 작성 할 때 사용 되 며,자바 인 터 페 이 스 는 일반적으로 응용 층 에서 앱 을 작성 할 때 사용 된다.
       Android 시스템 의 C/C++로그 인 터 페 이 스 는 매크로 를 통 해 사 용 됩 니 다.시스템/core/include/android/log.h 에서 로그 의 단 계 를 정의 합 니 다:

/* 
 * Android log priority values, in ascending priority order. 
 */ 
typedef enum android_LogPriority { 
 ANDROID_LOG_UNKNOWN = 0, 
 ANDROID_LOG_DEFAULT, /* only for SetMinPriority() */ 
 ANDROID_LOG_VERBOSE, 
 ANDROID_LOG_DEBUG, 
 ANDROID_LOG_INFO, 
 ANDROID_LOG_WARN, 
 ANDROID_LOG_ERROR, 
 ANDROID_LOG_FATAL, 
 ANDROID_LOG_SILENT, /* only for SetMinPriority(); must be last */ 
} android_LogPriority; 
system/core/include/utils/log.h 에서 ANDROID 와 같은 매크로 를 정의 합 니 다.LOG_VERBOSE 의 매크로 LOGV:

/* 
 * This is the local tag used for the following simplified 
 * logging macros. You can change this preprocessor definition 
 * before using the other macros to change the tag. 
 */ 
#ifndef LOG_TAG 
#define LOG_TAG NULL 
#endif 
 
/* 
 * Simplified macro to send a verbose log message using the current LOG_TAG. 
 */ 
#ifndef LOGV 
#if LOG_NDEBUG 
#define LOGV(...) ((void)0) 
#else 
#define LOGV(...) ((void)LOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__)) 
#endif 
#endif 
 
/* 
 * Basic log message macro. 
 * 
 * Example: 
 * LOG(LOG_WARN, NULL, "Failed with error %d", errno); 
 * 
 * The second argument may be NULL or "" to indicate the "global" tag. 
 */ 
#ifndef LOG 
#define LOG(priority, tag, ...) \ 
  LOG_PRI(ANDROID_##priority, tag, __VA_ARGS__) 
#endif 
 
/* 
 * Log macro that allows you to specify a number for priority. 
 */ 
#ifndef LOG_PRI 
#define LOG_PRI(priority, tag, ...) \ 
  android_printLog(priority, tag, __VA_ARGS__) 
#endif 
 
/* 
 * ================================================================ 
 * 
 * The stuff in the rest of this file should not be used directly. 
 */ 
#define android_printLog(prio, tag, fmt...) \ 
  __android_log_print(prio, tag, fmt) 
따라서 C/C++로그 인 터 페 이 스 를 사용 하려 면 자신의 LOG 를 정의 하면 됩 니 다.TAG 매크로 와 헤더 파일 시스템/core/include/utils/log.h 를 포함 하면 됩 니 다.
         #define LOG_TAG "MY LOG TAG"
         #include
         예 를 들 어 LOGV 를 사용 하면 됩 니 다.
         LOGV("This is the log printed by LOGV in android user space.");
           안 드 로 이 드 시스템 의 자바 로그 인 터 페 이 스 를 보십시오.Android 시스템 은 Frameworks 층 에서 Log 인 터 페 이 스 를 정의 합 니 다.
        (frameworks/base/core/java/android/util/Log.java):

................................................ 
 
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; 
 
..................................................... 
 
 public static int v(String tag, String msg) { 
  return println_native(LOG_ID_MAIN, VERBOSE, tag, msg); 
 } 
 
 public static int v(String tag, String msg, Throwable tr) { 
  return println_native(LOG_ID_MAIN, VERBOSE, tag, msg + '
' + getStackTraceString(tr)); } public static int d(String tag, String msg) { return println_native(LOG_ID_MAIN, DEBUG, tag, msg); } public static int d(String tag, String msg, Throwable tr) { return println_native(LOG_ID_MAIN, DEBUG, tag, msg + '
' + getStackTraceString(tr)); } public static int i(String tag, String msg) { return println_native(LOG_ID_MAIN, INFO, tag, msg); } public static int i(String tag, String msg, Throwable tr) { return println_native(LOG_ID_MAIN, INFO, tag, msg + '
' + getStackTraceString(tr)); } public static int w(String tag, String msg) { return println_native(LOG_ID_MAIN, WARN, tag, msg); } public static int w(String tag, String msg, Throwable tr) { return println_native(LOG_ID_MAIN, WARN, tag, msg + '
' + getStackTraceString(tr)); } public static int w(String tag, Throwable tr) { return println_native(LOG_ID_MAIN, WARN, tag, getStackTraceString(tr)); } public static int e(String tag, String msg) { return println_native(LOG_ID_MAIN, ERROR, tag, msg); } public static int e(String tag, String msg, Throwable tr) { return println_native(LOG_ID_MAIN, ERROR, tag, msg + '
' + getStackTraceString(tr)); } ..................................................................
       따라서 자바 로그 인 터 페 이 스 를 사용 하려 면 클래스 에서 정의 하 는 LOGTAG 상수 와 android.util.Log 를 참조 하면 됩 니 다.
        private static final String LOG_TAG = "MY_LOG_TAG";
        Log.i(LOG_TAG, "This is the log printed by Log.i in android user space.");
        이 LOG 의 출력 을 보 려 면 logcat 도구 에 맞 출 수 있 습 니 다.Eclipse 환경 에서 시 뮬 레이 터 를 실행 하고 Android 플러그 인 을 설치 했다 면 간단 합 니 다.Eclipse 에서 직접 볼 수 있 습 니 다.
 
  자신 이 컴 파일 한 Android 소스 코드 프로젝트 에서 사용 하 는 경우 배경 에서 시 뮬 레이 터 를 실행 합 니 다.
       USER-NAME@MACHINE-NAME:~/Android$ emulator &
       adb 셸 도구 시작:
       USER-NAME@MACHINE-NAME:~/Android$ adb shell
       로그 cat 명령 으로 로그 보기:
       root@android:/ # logcat
       이렇게 하면 출력 로 그 를 볼 수 있 습 니 다.
 이상 은 안 드 로 이 드 자체 의 LOG 정보 구현 방법 입 니 다.필요 한 친구 가 보 세 요.

좋은 웹페이지 즐겨찾기