热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Android系统开发中log的使用方法及简单的原理

LOG是广泛使用的用来记录程序执行过程的机制,它既可以用于程序调试,也可以用于产品运营中的事件记录;在平时开发过程中经常需要与log打交道,所以很有必要了解log的使用方法及简单的原理,感兴趣的朋友可以了解下啊
在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以用于程序调试,也可以用于产品运营中的事件记录。在Android系统中,提供了简单、便利的LOG机制,开发人员可以方便地使用。在平时开发过程中经常需要与log打交道,所以很有必要了解log的使用方法及简单的原理。

1、linux内核的log输出
在标准的linux内核开发过程中,使用printk,这是一个与printf输出打印齐名的函数,同样提供格式化输出功能,只是其有
打印级别且将信息保存到/proc/kmsg日志中,使用cat命令查看其信息[cat/proc/kmsg]
代码如下:

#defineKERN_EMERG"<0>"/*systemisunusable*/
#defineKERN_ALERT"<1>"/*actionmustbetakenimmediately*/
#defineKERN_CRIT"<2>"/*criticalconditions*/
#deinfeKERN_ERR"<3>"/*errorconditions*/
#deinfeKERN_WARNING"<4>"/*warningconditions*/
#deinfeKERN_NOTICE"<5>"/*normalbutsignificantcondition*/
#deinfeKERN_INFO"<6>"/*informational*/
#deinfeKERN_DEBUG"<7>"/*debug-levelmessages*/


2、android中log输出
Android系统在用户空间中提供了轻量级的logger日志系统,它是在内核中实现的一种设备驱动,与用户空间的logcat工具配合使用能够方便地跟踪调试程序。
Android系统中的C/C++日志接口是通过宏来使用的。在system/core/include/android/log.h定义了日志的级别:
/*
*Androidlogpriorityvalues,inascendingpriorityorder.
*/
typedefenumandroid_LogPriority{
ANDROID_LOG_UNKNOWN=0,
ANDROID_LOG_DEFAULT,/*onlyforSetMinPriority()*/
ANDROID_LOG_VERBOSE,
ANDROID_LOG_DEBUG,
ANDROID_LOG_INFO,
ANDROID_LOG_WARN,
ANDROID_LOG_ERROR,
ANDROID_LOG_FATAL,
ANDROID_LOG_SILENT,/*onlyforSetMinPriority();mustbelast*/
}android_LogPriority;

为了使用方便,在system/core/include/cutils/log.h定义了相对应的宏:
#defineLOGV(...)((void)LOG(LOG_VERBOSE,LOG_TAG,__VA_ARGS__))
#defineLOGD(...)((void)LOG(LOG_DEBUG,LOG_TAG,__VA_ARGS__))
#defineLOGI(...)((void)LOG(LOG_INFO,LOG_TAG,__VA_ARGS__))
#defineLOGW(...)((void)LOG(LOG_WARN,LOG_TAG,__VA_ARGS__))
#defineLOGE(...)((void)LOG(LOG_ERROR,LOG_TAG,__VA_ARGS__))
因为如果需要使用log输出,包含其头文件:#include并link其动态库:liblog.so即可
#defineLOG_TAG"XX_LOG_TAG"//这里可以定义其输出的TAG
#include
JAVA层打印:
importandroid.util.Log;
privatestaticfinalStringTAG="XX_LOG_TAG";
Log.e(TAG,"ThisistheerrorlogprintedbyLog.iinandroiduserspace.");

3、盒子上如何获取log
a、进入shell获取log
adbkill-server
adbconnectdest-ip
adbshell【登录shell】
mount-oremount/system/system【改变权限】
logcat>>1.log
命令行输入CTRL+C回到cmd命令行,adbpullpath/1.log
b、直接在cmd命令行获取log
adbconnect连上后;
adbshell
adblogcat>>path/1.log
操作完毕后
命令行输入CTRL+C回到cmd命令行,adbpullpath/1.log
c、在terminal终端直接输出log
回车切到shell
logcat[此时即可看到打印]

4、Eclipse环境下运行(安装了Android插件),那么直接可以在Eclipse就可以查看了
 

5、常用技巧
1、logcat中会打印【输出级别+LOG_TAG名字+进程字+打印的信息】可以充分利用这些信息分析问题
I/SystemServer(939):ActivityManager
I/ActivityManager(939):Memoryclass:96
E/AndroidRuntime(939):ErrorreportingWTF
第一列由Log.i(e/w..决定)或者LOGI/LOGE/LOGW...
第二列由LOG_TAG/TAG(JAVA)中决定,可以对于同一组模块前相同的前缀[xxx]funtion这种命名
第三列是系统进程号getpid()这值,打印线程值pthread_slef()

最后的就是自行增加的打印信息
2、调效效率或者执行时间
1、建议重点的打印增加前缀,方便查找。以[######]
2、直接利用logcat输出时间,调试执行速度,分析效率
logcat-vtime【Displaythedate,invocationtime,priority/tag,andPIDoftheoriginatingprocess.】
推荐阅读
  • 本文详细介绍如何使用arm-eabi-gdb调试Android平台上的C/C++程序。通过具体步骤和实用技巧,帮助开发者更高效地进行调试工作。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文详细介绍了Java中org.w3c.dom.Text类的splitText()方法,通过多个代码示例展示了其实际应用。该方法用于将文本节点在指定位置拆分为两个节点,并保持在文档树中。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • 本文详细介绍了 Java 中 org.eclipse.jface.viewers.ViewerCell 类的 getBackground() 方法,并提供了多个实际代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文探讨了在Java中实现系统托盘最小化的两种方法:使用SWT库和JDK6自带的功能。通过这两种方式,开发者可以创建跨平台的应用程序,使窗口能够最小化到系统托盘,并提供丰富的交互功能。 ... [详细]
author-avatar
低調浮華
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有