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))