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部分的内容后,再来更新正确的方法,先把这个方法记录下来。