IOS日志输出工具-syslogd
清楚log的命令:echo "" > syslog
越狱环境下syslogd是ios中记录系统日志的守护进程。syslogd to var/log/syslog的作用是把日志写入 var/log/syslog文件中
在安装完syslogd这个插件后需要重启一次ios(reboot也是一个系统进程),才会生成/var/log/syslog文件,在ios运行的全过程中这个文件会越来越大
可以通过cat /dev/null > /var/log/syslog来清空它
NSLog函数记录日志对于开发人员来说很方便,对于测试人员来说很麻烦,通常记录日志到文件,再通过email发出来,我一直觉得使用很不方便。
而且又不能像android那样连上USB,启动DDMS就可以看日志,所见即所得。
1. 配置日志服务器
日志本来是一个古老的技术,可是linux内核就有日志服务了,那么我觉得可以直接使用linux 的syslogd服务作为日志服务器。
syslogd默认配置是不支持收集远程日志的,可以在linux 上打开 “/etc/sysconfig/syslog”配置,给SYSLOGD_OPTIONS加上 " -r " 参数即可
编辑配置文件 vi /etc/sysconfig/syslog
# Options to syslogd
# -m 0 disables 'MARK' messages.
# -r enables logging from remote machines
# -x disables DNS lookups on messages recieved with -r
# See syslogd(8) for more details
SYSLOGD_OPTIONS="-r -m 0"
# Options to klogd
# -2 prints all kernel oops messages twice; once for klogd to decode, and
# once for processing with 'ksymoops'
# -x disables all klogd processing of oops messages entirely
# See klogd(8) for more details
KLOGD_OPTIONS="-x"
#
SYSLOG_UMASK=077
# set this to a umask value to use for all log files as in umask(1).
# By default, all permissions are removed for "group" and "other".
然后重启日志服务 sudo /etc/init.d/syslog restart
2. iOS 使用日志接口
iphone上也可直接syslog函数,但配置了iphone syslog服务把日志发到远程服务器,所以不JB是不行的。更何iOS码农更新一直都很积极。
只好另辟蹊跷。然后通过抓syslog协议的数据包,发现是直接以明文作为UDP包发送的,那这个就好办了,不就是几行代码的问题么。
具体参见源码
1
2#define LOG_SERVER_IP "192.168.2.13" //设置你syslog服务器的IP
#define LOG_SERVER_PORT 514 //设置syslog服务器的端口
然把logger.h及logger.m加到你的项目中,在xcode的pch预编译文件中加入 import "logger.h"即可
然后一句代都都不用写,自动把原有NSLog日志发送到远程服务器上了
3. 查看日志
通ssh连接到日志服务器上面,通tail 命令查看日志, grep来过滤日志内容
1
2
3tail-f /var/log/message |grep<程序tail;
tail -f /var/log/messagrep| grep ] &ntail(可以添加多个过滤条件)
tail -3000 /vgrepog/message [| grep <程序名>] (显示最近的3000条记录)
P.S. 虽然代码很简单,我觉得这个思路可以有助于大家测试程序,需者自取。
假如你没有linux服务器,或者不会玩linux也没有关系,可以试试windows上syslog server,http://sourceforge.net/projects/syslog-server/