如何在 Swift 中使用`syslog`
Posted
技术标签:
【中文标题】如何在 Swift 中使用`syslog`【英文标题】:How can I use `syslog` in Swift 【发布时间】:2015-10-18 05:53:22 【问题描述】:看起来syslog()
函数在 Swift 2 中不可用。
如何在 OS X 上向syslog
发送消息?
【问题讨论】:
【参考方案1】:问题是
void syslog(int priority, const char *message, ...);
接受一个变量参数列表,并且不导入到 Swift 中。你可以 使用
void vsyslog(int priority, const char *message, va_list args);
而是在 Swift 中定义一个包装函数:
func syslog(priority : Int32, _ message : String, _ args : CVarArgType...)
withVaList(args) vsyslog(priority, message, $0)
syslog(LOG_ERR, "i=%ld, x=%f", 123, 34.56)
请注意,字符串参数必须作为 C 字符串传递:
syslog(LOG_ERR, "status=%s", "OK".cStringUsingEncoding(NSUTF8StringEncoding))
或者,使用NSLog()
,它也会写入系统日志:
NSLog("i=%ld, x=%f, status=%@", 123, 34.56, "OK")
还要注意,在 OS X 上,syslog()
只是
"Apple System Logger facility"。你可以打电话
asl_XXX
直接起作用,你只需要#include <asl.h>
在桥接头文件中。如上,asl_log()
不是
导入到 Swift,你必须改为调用 asl_vlog()
。
【讨论】:
太棒了!谢谢!我找到了vsyslog
,但我不知道如何使用CVaListPointer
。
@ValentinShergin:不客气。 – 重新编辑:您对错字是正确的。但是message : String
是故意的并且有效,因为 Swift 字符串在传递给采用 const char *
参数的 C 函数时会自动转换,比较 ***.com/questions/27063569/…。
是的,我在发送编辑后意识到我错了,但是无法取消对 SO 的编辑。对不起,混乱。 :( Swift 很棒,你也很棒。以上是关于如何在 Swift 中使用`syslog`的主要内容,如果未能解决你的问题,请参考以下文章