如何在 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()
。
看起来 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()
。