码迷,mamicode.com
首页 > 移动开发 > 详细

Android O版本自定义日志输出目录

时间:2018-07-15 11:17:17      阅读:807      评论:0      收藏:0      [点我收藏+]

标签:define   ima   adb shell   root   它的   因此   分享图片   文件   def   

Android原生系统默认情况下,log是不输出到文件的,这样对于只能用模拟器进行开发实验的人来说,不是很方便。

当然android默认不输出log到文件也是考虑到输入日志到文件会引起性能问题。

下面提供一种将日志定向到文件的方法

修改system/core/logcat/logcatd.rc文件,在文件的最后添加如何代码:

# define my log directory
service applogcat /system/bin/logcat -v threadtime -r 4096 -n 10 -f  /data/log/android_logs/applogcat_log
     class late_start
     user root.
     group system
     disabled
     writepid /dev/cpuset/system-background/tasks

这里定义了一个名为applogcat的服务,服务对应的可执行文件为/system/bin/logcat,后面的/data/log/android_logs/applogcat_log表示日志的输出文件路径

修改system/core/rootdir/init.rc文件,在on post-fs-data阶段的最后添加如下代码

技术分享图片

注意,这里在创建data/log/android_logs目录时,分两步进行,因为在.rc文件里面不支持跨级创建文件(夹),因此这里先创建了log目录,然后才创建它的子目录android_logs。

最后,别忘了使用start命令,启动刚才创建的applogcat服务。

到这里,日志服务和目录已经创建好了。

此时,编译一下,重新手机发现只有目录,并没有对应的日志文件生成。

使用adb shell进行手机,dmesg查看一下kernel日志,发现SELinux权限报错。

此时,正确的方法应该是给/data/log/android_logs目录添加正确的SELinux权限,由于对SELinux部分内容并不了解,暂时不懂如何添加权限,于是直接从代码上把SELinux给关了。(不推荐这种方法,只是自己玩那无所谓)

从代码级别关闭SELinux的方法很简单,修改/system/core/init/init.cpp中的selinux_initialize(bool in_kernel_domain)方法即可,将其中的is_enforcing置为0即可。

技术分享图片

当然,这并不是正确的方法,等后面学习了SELinux部分的内容后,再来更新正确的方法,先把这个方法记录下来。

 

Android O版本自定义日志输出目录

标签:define   ima   adb shell   root   它的   因此   分享图片   文件   def   

原文地址:https://www.cnblogs.com/tsts/p/9311462.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!