看起来在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中的“instead”关键字并定义一个包装函数:
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")
syslog()
只是一个包装器,用于“苹果系统日志记录器设施”。你可以直接调用asl_XXX
函数,只需在桥接头文件中#include <asl.h>
。与上面一样,asl_log()
没有被导入到Swift中,你必须调用asl_vlog()
。
vsyslog
,但是我不知道如何使用CVaListPointer
。 - Valentin Sherginmessage : String
是有意的,并且有效,因为当传递给一个接受const char *
参数的 C 函数时,Swift 字符串会自动转换,可以参考 https://dev59.com/wV8d5IYBdhLWcg3wNAGy。 - Martin R