如何在 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`的主要内容,如果未能解决你的问题,请参考以下文章

如何在 syslog-ng 中使用 patterndb

如何使用 java 在 linux 上编写 Syslog

如何在windows服务器中使用syslog功能

Docker-如何使用 syslog 在主机上记录日志?

如何在 syslog4j syslog 服务器中解析 syslog 消息

如何使用 TCP 在 c# 控制台应用程序中监视 syslog 消息