不用重定向可不可以获取输出日志 ios

2026年09月25日 21:48
有5个网友回答
网友(1):

对于真机,日志没法保存,不好分析问题。所以有必要将日志保存到应用的Docunment目录下,并设置成共享文件,这样才能取出分析。
首先是日志输出,分为c的printf和标准的NSLog输出,printf会向标准输出(sedout)打印,而NSLog则是向标准出错(stderr),我们需要同时让他们都将日志打印到一个文件中。
例子:
freopen("xx.log","a+",stdout);
freopen("xx.log","a+",stderr);

具体做法:

// 将NSlog打印信息保存到Document目录下的文件中
- (void)redirectNSlogToDocumentFolder
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [paths objectAtIndex:0];
NSString *fileName = [NSString stringWithFormat:@"dr.log"];// 注意不是NSData!
NSString *logFilePath = [documentDirectory stringByAppendingPathComponent:fileName];
// 先删除已经存在的文件
NSFileManager *defaultManager = [NSFileManager defaultManager];
[defaultManager removeItemAtPath:logFilePath error:nil];

// 将log输入到文件
freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stdout);
freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stderr);
}

此函数要在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
中调用,这个函数在AppDelegate.m中实现的。

/*******************************************************************************/
// 当真机连接Mac调试的时候把这些注释掉,否则log只会输入到文件中,而不能从xcode的监视器中看到。
// 如果是真机就保存到Document目录下的drm.log文件中
UIDevice *device = [UIDevice currentDevice];
if (![[device model] isEqualToString:@"iPad Simulator"]) {
// 开始保存日志文件
[self redirectNSlogToDocumentFolder];
}
/*******************************************************************************/

最后配置共享文件夹:
在应用程序的Info.plist文件中添加UIFileSharingEnabled键,并将键值设置为YES。将您希望共享的文件放在应用程序的 Documents目录。一旦设备插入到用户计算机,iTunes 9.1就会在选中设备的Apps标签中显示一个File Sharing区域。此后,用户就可以向该目录添加文件或者将文件移动到桌面计算机中。如果应用程序支持文件共享,当文件添加到Documents目录后,应用程序应该能够识别并做出适当响应。例如说,应用程序可以将新文件的内容显示界面上。请不要向用户展现目录的文件列表并询问他们希望对文件执行什么操作。
就是说,一旦设备连接上电脑,可以通过iTune查看指定应用程序的共享文件夹,将文件拷贝到你的电脑上看。

参考连接:
1.http://hi.baidu.com/ios_zb_com/item/ea528f4a8b1100d8c1a59217
2.http://www.cnblogs.com/ThankForYou/archive/2012/09/12/2681739.htm

网友(2):

Keepalived默认所有的日志都是写入到/var/log/message下的,由于message的日志太多了,而Keepalived的日志又很难分离出来,所以本文提供了一个调整Keepalived日志输出路径的方法。
具体操作步骤如下:
一、修改 /etc/sysconfig/keepalived
把KEEPALIVED_OPTIONS="-D" 修改为KEEPALIVED_OPTIONS="-D -d -S 0"
#其中-S指定syslog的facility
二、重启服务
service keepalived restart
三、设置syslog,修改/etc/syslog.conf,添加内容如下
# keepalived -S 0
local0.* /var/log/keepalived.log
注意:local0是l是字符L的小写
四、Keepalived相关管理的知识拓展
/usr/local/keepalived/sbin/keepalived --vrrp -P Only run with VRRP subsystem.
/usr/local/keepalived/sbin/keepalived --check -C Only run with Health-checker subsystem.
/usr/local/keepalived/sbin/keepalived --dont-release-vrrp -V Dont remove VRRP VIPs & VROUTEs on daemon stop.
/usr/local/keepalived/sbin/keepalived --dont-release-ipvs -I Dont remove IPVS topology on daemon stop.
/usr/local/keepalived/sbin/keepalived --dont-fork -n Dont fork the daemon process.
/usr/local/keepalived/sbin/keepalived --use-file -f Use the specified configuration file. Default is /etc/keepalived/keepalived.conf.
/usr/local/keepalived/sbin/keepalived --dump-conf -d Dump the configuration data.
/usr/local/keepalived/sbin/keepalived --log-console -l Log message to local console.
/usr/local/keepalived/sbin/keepalived --log-detail -D Detailed log messages.
/usr/local/keepalived/sbin/keepalived --log-facility -S 0-7 Set syslog facility to LOG_LOCAL[0-7]. (default=LOG_DAEMON)
/usr/local/keepalived/sbin/keepalived --help -h Display this short inlined help screen.
/usr/local/keepalived/sbin/keepalived --version -v Display the version number
/usr/local/keepalived/sbin/keepalived --pid -p pidfile
/usr/local/keepalived/sbin/keepalived --checkers_pid -c checkers pidfile
/usr/local/keepalived/sbin/keepalived --vrrp_pid -r vrrp pidfile

网友(3):

呵呵呵呵呵呵呵呵呵呵呵呵呵

网友(4):

不可以因为你是sB

网友(5):

刚刚高科技