Android的日志系统分层与logcat使用

android的日志系统有典型的android层次结构。本文指出路径,分析层次但不分析代码,这里还介绍logcat的使用和log_bg服务。

日志系统分层

1.先从驱动开始

  • linux-3.10/drivers/staging/android/logger.c
  • linux-3.10/drivers/staging/android/logger.h
  • logger_init创建4个日志设备文件/dev/main、/dev/events、/dev/radio、/dev/system。
  • 分析代码的话跟踪结构体static const struct file_operations logger_fops实例化的函数进行分析。

2.C/C++本地库和android实时运行库层

在android/system/core/liblog目录下,分析Android.mk可知主要是logd_write.c和fake_log_device.c其它根据WITH_MINGW配置。

3.JNI

frameworks/base/core/jni/android_util_Log.cpp

4.Application Frameworks

frameworks/base/core/java/android/util/Log.java

5.APP中使用日志系统

import android.util.Slog
然后Slog.e(TAG,"***")使用错误日志

现在分层

logcat工具使用

代码路径android/system/core/logcat/logcat.cpp,输入logcat --h查看帮助。

这里我们修改logcat.cpp设置日志系统默认每个日志文件的大小,日志文件的个数

static int g_logRotateSizeKBytes = 4096; // 0 means "no log rotation"
static int g_maxRotatedLogs = 10; // 0 means "unbounded"

每个日志文件最大4M,最多10个。当10个日志写满有最新的日志时,原日志名尾号9删除,其余尾号+1,最新日志写到尾号0的日志。实现固定大小,循环使用。

log_bg.sh工具

android/device/softwinner/common/tools/log_bg.sh

前面几个循环是计数,删除,重命名。

系统日志logcat -v time -f /cache/local/boot_log/aw_${count}_system_boot.log &

内核日志cat /proc/kmsg >> /cache/local/boot_log/aw_${count}_kernel_`date +%Y%m%d-%H%M`.log &

android开机就会记录日志记录,输入ps查询到

root      1668  1646  1632   948   c0122258 b6f57720 S logcat

在init.rc文件中查找发现日志服务的启动位置android/device/softwinner/common/init.debug.rc

service log_bg /system/bin/sh /system/bin/log_bg.sh
class core
user root
group root system
oneshot

logger.sh工具

android/device/softwinner/common/tools/logger.sh

实际这个工具根据输入参数kernelandroidradioerror调用logcat

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • Android开发笔记之:一分钟学会使用Logcat调试程序的详解

    这是个很简单的问题,但每次隔一段时间后使用起来总是会出点乱子.这里记录下Logcat的步骤:1,在Activity里申明tag变量(名字其实是随便的,如下:private static final String tag="yan";2,需要使用logcat输出信息时:Log.i(tag, "屏幕宽度:"+display.getWidth()+" 屏幕高度:"+display.getHeight());3, 双击Logcat,点击"+&q

  • Android Studio使用小技巧:自定义Logcat

    我们都知道Logcat是我们Android开发调试最常用的一个工具,但是Android Studio默认的Logcat调试的颜色是一样的,我们不好区分verbose.debug.error等分类信息,今天就来教大家自定义Logcat的提示信息. 打开Preference->Editor->Colors & Fonts->Android Logcat(或者搜索logcat),如果我们默认选择的是Darcula主题会看到如下界面: 这个默认的是无法更改,我们可以点击"Sav

  • logcat命令使用方法和查看android系统日志缓冲区内容的方法

    *注:可以用 adb logcat > 路径/文件名 来保存,此命令执行之时起的全部日志信息到一个文件里,ctrl + C 结束日志输出:后面不加 > 路径/文件名 的话,则在 stdout (终端窗口)中输出!例如:$ adb logcat -v long Checkin *:S > ~/桌面/log.txt 一.在 Java 与 C 语言中输出日志:1) Java 代码在程序中输出日志, 使用 android.util.Log 类的以下 5 个方法:   Log.v().Log.d(

  • android真机调试时无法显示logcat信息的解决方法介绍

    android真机调试时无法显示logcat信息的解决方法介绍: window-->show view-->android->devices, 打开devices,点击右边的截屏图片的按钮.等到出现截图的时候,logcat就出来信息了!

  • Android开发之在程序中时时获取logcat日志信息的方法(附demo源码下载)

    本文实例讲述了Android开发之在程序中时时获取logcat日志信息的方法.分享给大家供大家参考,具体如下: 今天分享一个在软件开发中很实用的例子,也是这几天在通宵加班中我使用的一个小例子, 在程序中监听Log信息. 为什么说它实用?原因是Android的开发厂商各种修改之后手机和手机之间以后存在很多差异.比如说魅族M9手机 开发中如果项目中涉及到访问手机系统的地方,例如访问系统短信库,M9手机它会提示一个dialog框 让用户自己去选择 访问还是不访问.这样就给开发适配带来了巨大的麻烦.本来

  • Android shell命令行中过滤adb logcat输出的几种方法

    我们在Android开发中总能看到程序的log日志内容充满了屏幕,而真正对开发者有意义的信息被淹没在洪流之中,让开发者无所适从,严重影响开发效率.本文就具体介绍几种在shell命令行中过滤adb logcat输出的方法.        1.只显示需要的输出(白名单) 最方便的当然是通过管道使用 grep 过滤了,这样可以使用 grep 强大的正则表达式匹配.简单的匹配一行当中的某个字符串,例如 MyApp: adb logcat | grep MyApp adb logcat | grep -i

  • Android 日志系统Logger源代码详细介绍

    我们知道,在Android系统中,提供了一个轻量级的日志系统,这个日志系统是以驱动程序的形式实现在内核空间的,而在用户空间分别提供了Java接口和C/C++接口来使用这个日志系统,取决于你编写的是Android应用程序还是系统组件.在前面的文章浅谈Android系统开发中LOG的使用中,已经简要地介绍了在Android应用程序开发中Log的使用方法,在这一篇文章中,我们将更进一步地分析Logger驱动程序的源代码,使得我们对Android日志系统有一个深刻的认识. 既然Android 日志系统是

  • Android调试华为和魅族手机logcat不显示的问题

    前言: 最近公司在项目开发中,由于华为手机存在部分的问题.所以购买了部分新款的华为手机.在真机调试项目APP时,老是无法出现Logcat打印出来的各种错误信息. ▲ 问题分析 google查证之后确定,目前国内华为.魅族手机都会有同样的情况.原因是国内的部分厂商定制的手机对于应用中的 Log 日志默认做了打印限制,需要手动设置才能打印出特殊级别的日志. ▲ 解决方案 华为(HUAWEI) 进入工程模式 启动拨号应用,输入:##2846579## 这样一串东西即可 选择"1.后台设置"

  • Android adb logcat 命令查看日志详细介绍

    Android 开发的程序员开发程序的时候,一定为log而苦恼过吧.Eclipse老是Log找不到,是不是很让人不爽,虽然Android Studio的Logcat功能很不错,但也没有在命令行terminal中打印出来更方便. 使用 logcat 命令 查看和跟踪系统日志缓冲区的命令logcat的一般用法是: [adb] logcat [<option>] ... [<filter-spec>] ... 下文介绍过滤器和命令选项,详细内容可参见Listing of logcat C

  • Android的日志系统分层与logcat使用

    android的日志系统有典型的android层次结构.本文指出路径,分析层次但不分析代码,这里还介绍logcat的使用和log_bg服务. 日志系统分层 1.先从驱动开始 linux-3.10/drivers/staging/android/logger.c linux-3.10/drivers/staging/android/logger.h logger_init创建4个日志设备文件/dev/main./dev/events./dev/radio./dev/system. 分析代码的话跟踪

  • 解决Android Studio日志太长或滚动太快问题

    前言 安卓开发经常遇到那种日志太长或滚动得太快, 我们直接的解决办法就是进行日志输出长度增大和添加日志过滤器,个人推荐用adb logcat处理更加方便灵活. 解决办法 1. 搜索过滤器 2. 修改日志缓冲大小 找到 " Android Studio安装目录\bin\idea.properties" 文件中的 idea.cycle.buffer.size=1024 修改成你要的缓冲大小即可. 3. adb logcat 输出日志到指定文件(不能解决日志过长的问题) i. 配置adb环境

  • .net 日志系统解析

    一.   写在前面 日志系统对于任何项目都是必不可少的,无论对于测试阶段的debug,性能测试,执行时间,操作记录还是线上的问题排查,访问记录等,日志系统都扮演着重要的角色.本篇分享的目的是能帮助需要的人快速搭建自己的LogSystem.,仅供参考. 先上个图呗,自认为页面还算清爽吧: 我的LogSystem使用Log4net入库的方式,网上特别多的分享,但是能完整运行下来的真是很少,所以现在需要和以后用得上的小伙伴抓紧收藏咯. 二.  Log4Net自定义内容入库 Log4Net存日志的方式,

  • android编程实现系统图片剪裁的方法

    本文实例讲述了android编程实现系统图片剪裁的方法.分享给大家供大家参考,具体如下: package cn.test; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import android.app.Activity; import android.content.ContentResolver; import android.content.ContentUris; impo

  • Android 实现调用系统照相机拍照和录像的功能

    本文实现android系统照相机的调用来拍照 项目的布局相当简单,只有一个Button: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_heig

  • Android实现调用系统相册和拍照的Demo示例

    本文讲述了Android实现调用系统相册和拍照的Demo示例.分享给大家供大家参考,具体如下: 最近我在群里看到有好几个人在交流说现在网上的一些Android调用系统相册和拍照的demo都有bug,有问题,没有一个完整的.确实是,我记得一个月前,我一同学也遇到了这样的问题,在低版本的系统中没问题,用高于4.4版本的系统就崩溃.所以,我还是想提取出来,给大家整理一下,一个比较完整无bug的demo,让大家收藏,留着以后用. 其实对于调用手机图库,高版本的系统会崩溃,是因为获取方法变了,所以我们应该

  • JS辨别访问浏览器判断是android还是ios系统

    项目中需要扫描二维码之后自动分辨出是android还是ios系统,针对于不同的系统进行不同的下载. <script type="text/javascript"> /* * 智能机浏览器版本信息: * */ var browser = { versions: function() { var u = navigator.userAgent, app = navigator.appVersion; return {//移动终端浏览器版本信息 trident: u.indexO

  • Android获取手机系统版本等信息的方法

    本文实例讲述了Android获取手机系统版本等信息的方法.分享给大家供大家参考.具体如下: String phoneInfo = "Product: " + android.os.Build.PRODUCT; phoneInfo += ", CPU_ABI: " + android.os.Build.CPU_ABI; phoneInfo += ", TAGS: " + android.os.Build.TAGS; phoneInfo += &qu

  • Android编程实现系统重启与关机的方法

    本文实例讲述了Android编程实现系统重启与关机的方法.分享给大家供大家参考,具体如下: 最近在做个东西,巧合碰到了sharedUserId 的问题,所以收集了一些资料,存存档备份. 安装在设备中的每一个apk文件,Android 给每个 APK 进程分配一个单独的用户空间,其 manifest 中的 userid 就是对应一个 Linux 用户都会被分配到一个属于自己的统一的 Linux 用户 ID,并且为它创建一个沙箱,以防止影响其他应用程序(或者其他应用程序影响它). 用户 ID 在应用

随机推荐