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

Posted TPrime.A

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android O版本自定义日志输出目录相关的知识,希望对你有一定的参考价值。

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版本自定义日志输出目录的主要内容,如果未能解决你的问题,请参考以下文章

Android - 如何将自定义对象传递给片段

从android中的片段更改自定义ActionBar标题

片段中ListView的android自定义适配器

nodejs常用代码片段

日志技术-Java原生日志实现JUL

Android:在片段内膨胀自定义视图