如何在 Swift 中使用 `syslog`

How can I use `syslog` in Swift

看起来 syslog() 功能在 Swift 2.

中不可用

如何在 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, [=12=]) }
}

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