// Package syslog contains a syslog handler. // // We use this handler on macOS systems to log messages // when ooniprobe is running in the background. package syslog import ( "fmt" "unsafe" "github.com/apex/log" ) /* #include void ooniprobe_openlog(void); void ooniprobe_log_debug(const char *message); void ooniprobe_log_info(const char *message); void ooniprobe_log_warning(const char *message); void ooniprobe_log_err(const char *message); void ooniprobe_log_crit(const char *message); */ import "C" // Default is the handler that emits logs with syslog var Default log.Handler = newhandler() type handler struct{} func newhandler() handler { C.ooniprobe_openlog() return handler{} } func (h handler) HandleLog(e *log.Entry) error { message := fmt.Sprintf("%s %+v", e.Message, e.Fields) cstr := C.CString(message) defer C.free(unsafe.Pointer(cstr)) switch e.Level { case log.DebugLevel: C.ooniprobe_log_debug(cstr) case log.InfoLevel: C.ooniprobe_log_info(cstr) case log.WarnLevel: C.ooniprobe_log_warning(cstr) case log.ErrorLevel: C.ooniprobe_log_err(cstr) default: C.ooniprobe_log_crit(cstr) } return nil }