macos – 如何在Swift中使用`syslog`

看起来在
Swift 2中没有syslog()函数.

如何在OS X上向syslog发送消息?

最佳答案 问题是

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().

点赞