This came up again recently, compare the discussion here: https://lists.gnu.org/archive/html/guix-devel/2019-06/msg00186.html
Here’s some code to wrap an executable manually to capture its output and send it to syslog: (define* (logger-wrapper name exec . args) "Return a derivation that builds a script to start a process with standard output and error redirected to syslog via logger." (define exp #~(begin (use-modules (ice-9 popen)) (let* ((pid (number->string (getpid))) (logger #$(file-append inetutils "/bin/logger")) (args (list "-t" #$name (string-append "--id=" pid))) (pipe (apply open-pipe* OPEN_WRITE logger args))) (dup pipe 1) (dup pipe 2) (execl #$exec #$exec #$@args)))) (program-file (string-append name "-logger") exp))