返回顶部
首页 > 资讯 > 移动开发 >Android 实现自己的LOG信息
  • 798
分享到

Android 实现自己的LOG信息

logAndroid 2022-06-06 07:06:20 798人浏览 安东尼
摘要

       在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以用于程序调试,也可以用于产品运

       在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以用于程序调试,也可以用于产品运营中的事件记录。在Android系统中,提供了简单、便利的LOG机制,开发人员可以方便地使用。在这一篇文章中,我们简单介绍在Android内核空间和用户空间中LOG的使用和查看方法。

        一. 内核开发时LOG的使用。Android内核是基于linux Kerne 2.36的,因此,Linux Kernel的LOG机制同样适合于Android内核,它就是有名的printk,与C语言的printf齐名。与printf类似,printk提供格式化输入功能,同时,它也具有所有LOG机制的特点--提供日志级别过虑功能。printk提供了8种日志级别(<linux/kernel.h>):


#define KERN_EMERG "<0>"   
#define KERN_ALERT "<1>"   
#define KERN_CRIT "<2>"   
#deinfe KERN_ERR "<3>"   
#deinfe KERN_WARNING "<4>"   
#deinfe KERN_NOTICE "<5>"   
#deinfe KERN_INFO "<6>"   
#deinfe KERN_DEBUG "<7>"   

       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 shell工具

       USER-NAME@MACHINE-NAME:~/Android$ adb shell

       查看/proc/kmsg文件:

       root@android:/ # cat  /proc/kmsg

        二. 用户空间程序开发时LOG的使用。Android系统在用户空间中提供了轻量级的logger日志系统,它是在内核中实现的一种设备驱动,与用户空间的loGCat工具配合使用能够方便地跟踪调试程序。在Android系统中,分别为C/C++ 和Java语言提供两种不同的logger访问接口。C/c++日志接口一般是在编写硬件抽象层模块或者编写JNI方法时使用,而Java接口一般是在应用层编写APP时使用。

       Android系统中的C/C++日志接口是通过宏来使用的。在system/core/include/android/log.h定义了日志的级别:


 
typedef enum android_LogPriority { 
 ANDROID_LOG_UNKNOWN = 0, 
 ANDROID_LOG_DEFAULT,  
 ANDROID_LOG_VERBOSE, 
 ANDROID_LOG_DEBUG, 
 ANDROID_LOG_INFO, 
 ANDROID_LOG_WARN, 
 ANDROID_LOG_ERROR, 
 ANDROID_LOG_FATAL, 
 ANDROID_LOG_SILENT,  
} android_LogPriority; 

在system/core/include/cutils/log.h中,定义了对应的宏,如对应于ANDROID_LOG_VERBOSE的宏LOGV:


 
#ifndef LOG_TAG 
#define LOG_TAG NULL 
#endif 
 
#ifndef LOGV 
#if LOG_NDEBUG 
#define LOGV(...) ((void)0) 
#else 
#define LOGV(...) ((void)LOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__)) 
#endif 
#endif 
 
#ifndef LOG 
#define LOG(priority, tag, ...) \ 
  LOG_PRI(ANDROID_##priority, tag, __VA_ARGS__) 
#endif 
 
#ifndef LOG_PRI 
#define LOG_PRI(priority, tag, ...) \ 
  android_printLog(priority, tag, __VA_ARGS__) 
#endif 
 
#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.");

           再来看Android系统中的Java日志接口。Android系统在Frameworks层中定义了Log接口:

        (frameworks/base/core/java/android/util/Log.java):


................................................ 
public final class Log { 
................................................ 
  
 public static final int VERBOSE = 2; 
  
 public static final int DEBUG = 3; 
  
 public static final int INFO = 4; 
  
 public static final int WARN = 5; 
  
 public static final int ERROR = 6; 
  
 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)); 
 } 
.................................................................. 

       因此,如果要使用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.");

        要查看这些LOG的输出,可以配合logcat工具。如果是在Eclipse环境下运行模拟器,并且安装了Android插件,那么,很简单,直接在Eclipse就可以查看了:

 

  如果是在自己编译的Android源代码工程中使用,则在后台中运行模拟器:

       USER-NAME@MACHINE-NAME:~/Android$ emulator &

       启动adb shell工具:

       USER-NAME@MACHINE-NAME:~/Android$ adb shell

       使用logcat命令查看日志:

       root@android:/ # logcat

       这样就可以看到输出的日志了。

 以上就是Android 自己的LOG信息实现方法,有需要的朋友看下。

您可能感兴趣的文章:Android开发笔记之:Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)Android系统开发中log的使用方法及简单的原理android轻松管理安卓应用中的log日志 发布应用时log日志全部去掉的方法android杂记:C++文件的添加log方法分享Android将应用调试log信息保存在SD卡的方法Android编程之基于Log演示一个activity生命周期实例详解microlog4android将Android Log日志写到SD卡文件中实现方法Android 日志工具(log)的使用方法Android开发实现的Log统一管理类


--结束END--

本文标题: Android 实现自己的LOG信息

本文链接: https://lsjlt.com/news/24398.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android 实现自己的LOG信息
           在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以用于程序调试,也可以用于产品运...
    99+
    2022-06-06
    log Android
  • 自己实现的android树控件treeview
    1.开发原因在项目中经常需要一个需要一个树状框架,这是非常常见的控件。不过可能是谷歌考虑到android是手机系统,界面宽度有限,所以只提供了只有二级的ExpandableLi...
    99+
    2022-06-06
    treeview Android
  • Android实现信息弹出框
    本文实例为大家分享了Android实现信息弹出框的具体代码,供大家参考,具体内容如下 layout下的dialog_common_layout.xml <?xml ...
    99+
    2024-04-02
  • 使自己的ip相关信息快速显示
    快速显示Windows ip配置相当的简单: 步骤如下: (1)win+r输入cmd。 (2)在命入ipconfig。 如上图就可以看见所以的详细信息了,是不是很方便。 最后附带一个更加强大的就是ipconfig/al...
    99+
    2023-05-24
    ip 相关信息 快速显示 相关 信息
  • 怎么查看自己云服务器的信息
    打开您的云服务器控制台应用程序。您可以通过控制台应用程序进入该应用程序并查看相关信息。例如,您可以在控制台中查看当前云服务器的状态,包括使用的云服务版本和云服务器的状态等。 单击“查看服务器信息”选项卡。在该选项卡中,您可以查看云服务器的...
    99+
    2023-10-28
    服务器 信息
  • 自己实现Android View布局流程
    目录MeasureSpecLayoutParamViewViewGroupTextColumn使用总结相关阅读:尝试自己实现Android View Touch事件分发流程 Andr...
    99+
    2024-04-02
  • android实现系统信息推送
    本文实例为大家分享了android实现系统信息推送的具体代码,供大家参考,具体内容如下 1、判断是否是启动App,而非刷新界面执行该方法 if (!window.name) {   ...
    99+
    2024-04-02
  • 自己的云服务器在哪里看到信息
    我的云服务器是我自己购买的,它有一个强大的安全系统和高可用性,可以确保我的数据和应用程序得到最大的保护。我选择的云服务商提供了高质量的数据备份、恢复和灾难恢复服务,可以确保我的数据不会丢失或被黑客攻击。 我使用云服务商的另一个原因是它们的...
    99+
    2023-10-28
    自己的 服务器 信息
  • Android实现获取SERIAL信息的方法
    本文实例讲述了Android实现获取SERIAL信息的方法。分享给大家供大家参考。具体如下: android.os.build.serial 在API 9 中引入,如果低于9的...
    99+
    2022-06-06
    方法 Android
  • Android编程实现微信分享信息的方法
    本文实例讲述了Android编程实现微信分享信息的方法。分享给大家供大家参考,具体如下: 随着微信越来越火,越来越多的应用要求有分享到微信的功能。虽然有很多平台都帮集成有分享功...
    99+
    2022-06-06
    方法 微信分享 Android
  • Python实现自己的AOP
    Java中的AOP可以用JDK的动态代理和cglib来实现,将需要拦截的方法前后可以额外添加些功能。 Python中有许多方法去实现AOP,现在先介绍第一种比较简单的: 1)利用with...as... Python的with....
    99+
    2023-01-31
    自己的 Python AOP
  • Android 实现 NFC 读取卡片信息
    效果图: 因为朋友需要个读取NFC卡片数据的功能,所以最近看了一下Android 系统下NFC 读取卡片信息的操作。 NFC(近距离无线通信 ) 是一组近距离无线技术,通常只有在距离不超过 ...
    99+
    2023-09-09
    android android studio ide Powered by 金山文档
  • 如何使自己的ip相关信息快速显示
    本篇内容主要讲解“如何使自己的ip相关信息快速显示”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使自己的ip相关信息快速显示”吧!快速显示windows ip配置相当的简单:步骤如下:(1)...
    99+
    2023-06-14
  • 如何建立自己的云服务器地址信息
    选择可靠的云服务提供商:选择一个有经验的云服务提供商,并了解他们的安全政策、服务质量和费用等方面的信息,以确保选择一个可靠的云服务提供商。 确定云服务器的位置:选择一个能够提供你所需的云服务器位置的地点,确保它易于维护和管理。 选择合适的...
    99+
    2023-10-28
    自己的 地址 服务器
  • Android编程实现捕获程序异常退出时的错误log信息功能详解
    本文实例讲述了Android编程实现捕获程序异常退出时的错误log信息功能。分享给大家供大家参考,具体如下:很多时候我们程序无缘无故的就挂掉了,让我们一头雾水,如果刚好我们在调试,那我们可以通过错误log来查看是什么原因引起的程序崩溃。但是...
    99+
    2023-05-30
    android 异常 错误
  • python实现半自动化发送微信信息
    本文实例为大家分享了python半自动化发送微信信息的具体代码,供大家参考,具体内容如下 相关第三方库 1.pyautogui 自动操作鼠标、键盘的第三方库 2.pyperclip...
    99+
    2024-04-02
  • python怎么实现微信自动发送信息
    要实现微信自动发送信息,可以使用Python的第三方库itchat来实现。itchat是一个开源的微信个人号接口,可以通过Pytho...
    99+
    2023-08-31
    python
  • Android自定义View实现广告信息上下滚动效果
    先看看效果: 实现代码: public class ScrollBanner extends LinearLayout { private TextView mBann...
    99+
    2022-06-06
    view 动效 广告 Android
  • Android将应用调试log信息保存在SD卡的方法
    把自己应用的调试信息写入到SD卡中。 package com.sdmc.hotel.util; import java.io.BufferedReader; import...
    99+
    2022-06-06
    方法 sd sd卡 log Android
  • 阿里云怎么查看自己服务器信息
    简介 阿里云是中国领先的云计算服务提供商,提供强大的服务器资源和丰富的功能。在使用阿里云服务器时,了解自己的服务器信息是非常重要的。本文将介绍如何在阿里云上查看自己服务器的信息。详细说明1. 登录阿里云控制台首先,打开浏览器并访问阿里云官网...
    99+
    2024-01-20
    阿里 服务器 信息
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作