当前位置: 首页 > news >正文

Android logcat系统

一 .logcat命令介绍

android log系统:

logcat介绍 :

logcat是android中的一个命令行工具,可以用于得到程序的log信息.

二.C/C++logcat访问接口

Android系统中的C/C++日志接口是通过宏来使用的。在system/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/cutils/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宏和包含头文件system/core/include/cutils/log.h就可以了:

 #define LOG_TAG "MY LOG TAG"

         #include <cutils/log.h>

         就可以了,例如使用LOGV:

         LOGV("This is the log printed by LOGV in android user space.");

三.Java logcat访问接口

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 + '\n' + 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 + '\n' + 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 + '\n' + 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 + '\n' + 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 + '\n' + getStackTraceString(tr));}................................................................../**@hide */ public static native int println_native(int bufID,int priority, String tag, String msg);
}

因此,如果要使用Java日志接口,只要在类中定义的LOG_TAG常量和引用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.");

四.logcat命令参数

参数

描述

-b <buffer>加载一个可使用的日志缓冲区供查看,比如event和radio。默认值是main
-c清除缓冲区中的全部日志并退出(清除完后可以使用-g查看缓冲区)
-d将缓冲区的log转存到屏幕中然后退出
-f <filename>将log输出到指定的文件中<文件名>.默认为标准输出(stdout)
-g打印日志缓冲区的大小并退出
-n <count>设置日志的最大数目<count>,默认值是4,需要和-r选项一起使用
-r <kbytes>没<kbytes>时输出日志,默认值是16,需要和-f选项一起使用
-s设置过滤器
-v <format>设置输出格式的日志消息。默认是短暂的格式。支持的格式列表
//将缓冲区的log打印到屏幕并退出adb logcat -d//清除缓冲区log(testCase运行前可以先清除一下)adb logcat -c//打印缓冲区大小并退出adb logcat -g//输出logadb logcat -f /data/local/tmp/log.txt -n 10 -r 1

http://www.lryc.cn/news/311396.html

相关文章:

  • android 使用协程CoroutineScope 实现定时器
  • 【algorithm】算法基础课---排序算法(附笔记 | 建议收藏)
  • UnityShader——09数学知识3
  • langchain学习笔记(九)
  • 周处除三害在线资源最新电影1080p高清
  • STM32CubeIDE基础学习-新建STM32CubeIDE基础工程
  • R语言简介|你对R语言了解多少?
  • Android的硬件接口HAL
  • 【js】数组的常用方法
  • 08. Nginx进阶-Nginx动静分离
  • RPC--一起学习吧之架构
  • 服务器后端是学习java还是php
  • DCFL: for Oriented Tiny Object Detection
  • 代码学习记录11
  • 【LeetCode】第 387 场周赛
  • 基于 Vue3打造前台+中台通用提效解决方案(下)
  • Topaz Video AI:一键提升视频品质,智能重塑影像魅力 mac/win版
  • 高效办公软件中哪个提醒待办事项更有效
  • 牛客练习赛122
  • 软考复习调整策略和学习计划!
  • 1小时网络安全事件报告要求,持安零信任如何帮助用户应急响应?
  • mysql使用连接池
  • 06. Nginx进阶-Nginx代理服务
  • STM32 (1)
  • Spring初始(相关基础知识和概述)
  • 【Swift 周报 第四十七期
  • STM32(16)使用串口向电脑发送数据
  • 利用大模型技术进行测试用例推荐如何实现
  • Linux学习:初识Linux
  • Python CGI编程错误汇总