我刚刚写了一些代码来做到这一点。它使用 ASL 而不是 syslog,并且使用 kevents,因此您可能需要将其移植到系统的不同 API(syslog 而不是 ASL 和 poll/select 而不是 kevent)
http://cgit.freedesktop.org/xorg/app/xinit/tree/launchd/console_redirect.c
此外,我基本上将它添加到 Mountain Lion 上的 libsystem_asl 中。查看 asl_log_descriptor 的手册页。
例子:
#include <asl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
asl_log_descriptor(NULL, NULL, ASL_LEVEL_INFO, STDOUT_FILENO, ASL_LOG_DESCRIPTOR_WRITE);
asl_log_descriptor(NULL, NULL, ASL_LEVEL_NOTICE, STDERR_FILENO, ASL_LOG_DESCRIPTOR_WRITE);
fprintf(stdout, "This is written to stdout which will be at log level info.");
fprintf(stderr, "This is written to stderr which will be at log level notice.");
return 0;
}