summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--doc/guix.texi17
-rw-r--r--gnu/services/audio.scm74
2 files changed, 56 insertions, 35 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 93aedee0ce..7df9a6b8a2 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -34288,10 +34288,10 @@ will depend on.
 @item @code{environment-variables} (default: @code{'("PULSE_CLIENTCONFIG=/etc/pulse/client.conf" "PULSE_CONFIG=/etc/pulse/daemon.conf")}) (type: list-of-strings)
 A list of strings specifying environment variables.
 
-@item @code{log-file} (default: @code{"/var/log/mpd/log"}) (type: maybe-string)
-The location of the log file.  Set to @code{syslog} to use the local
-syslog daemon or @code{%unset-value} to omit this directive from the
-configuration file.
+@item @code{log-file} (type: maybe-string)
+The location of the log file.  Unless specified, logs are sent to the
+local syslog daemon.  Alternatively, a log file name can be specified,
+for example @file{/var/log/mpd.log}.
 
 @item @code{log-level} (type: maybe-string)
 Supress any messages below this threshold.  The available values, in
@@ -34565,11 +34565,10 @@ HTTP port to listen on.
 How much detail to include in logs, possible values: @code{0} to
 @code{7}.
 
-@item @code{log-to} (default: @code{"/var/log/mympd/log"}) (type: string-or-symbol)
-Where to send logs.  By default, the service logs to
-@file{/var/log/mympd.log}.  The alternative is @code{'syslog}, which
-sends output to the running syslog service under the @samp{daemon}
-facility.
+@item @code{log-to} (type: maybe-string)
+Where to send logs.  Unless specified, the service logs to the local
+syslog service under the @samp{daemon} facility.  Alternatively, a log
+file name can be specified, for example @file{/var/log/mympd.log}.
 
 @item @code{lualibs} (default: @code{"all"}) (type: maybe-string)
 See
diff --git a/gnu/services/audio.scm b/gnu/services/audio.scm
index b8596dbadd..f3c8fae23c 100644
--- a/gnu/services/audio.scm
+++ b/gnu/services/audio.scm
@@ -253,6 +253,18 @@ user-group instead~%"))
         (else
          (configuration-field-error #f 'group value))))
 
+(define (mpd-log-file-sanitizer value)
+  (match value
+    (%unset-value
+     ;; XXX: While leaving the 'sys_log' option out of the mpd.conf file is
+     ;; supposed to cause logging to happen via systemd (elogind provides a
+     ;; compatible interface), this doesn't work (nothing gets logged); use
+     ;; syslog instead.
+     "syslog")
+    ((? string?)
+     value)
+    (_ (configuration-field-error #f 'log-file value))))
+
 ;;;
 
 ;; Generic MPD plugin record, lists only the most prevalent fields.
@@ -425,10 +437,11 @@ will depend on."
    empty-serializer)
 
   (log-file
-   (maybe-string "/var/log/mpd/log")
-   "The location of the log file. Set to @code{syslog} to use the
-local syslog daemon or @code{%unset-value} to omit this directive
-from the configuration file.")
+   maybe-string
+   "The location of the log file.  Unless specified, logs are sent to the
+local syslog daemon.  Alternatively, a log file name can be specified, for
+example @file{/var/log/mpd.log}."
+   (sanitizer mpd-log-file-sanitizer))
 
   (log-level
    maybe-string
@@ -585,7 +598,11 @@ appended to the configuration.")
           (username (user-account-name user)))
       (shepherd-service
        (documentation "Run the MPD (Music Player Daemon)")
-       (requirement `(user-processes loopback ,@shepherd-requirement))
+       (requirement `(user-processes loopback
+                                     ,@(if (string=? "syslog" log-file)
+                                           '(syslogd)
+                                           '())
+                                     ,@shepherd-requirement))
        (provision '(mpd))
        (start
         (with-imported-modules (source-module-closure
@@ -721,8 +738,15 @@ user-group instead~%"))
           (name value)))
         (else
          (configuration-field-error #f 'group value))))
-;;;
 
+(define (mympd-log-to-sanitizer value)
+  (match value
+    ('syslog
+     (warning (G_ "syslog symbol value for 'log-to' is deprecated~%"))
+     %unset-value)
+    ((or %unset-value (? string?))
+     value)
+    (_ (configuration-field-error #f 'log-to value))))
 
 ;; XXX: The serialization procedures are insufficient since we require
 ;; access to multiple fields at once.
@@ -787,10 +811,11 @@ will depend on."
    "How much detail to include in logs, possible values: @code{0} to @code{7}.")
 
   (log-to
-   (string-or-symbol "/var/log/mympd/log")
-   "Where to send logs. By default, the service logs to
-@file{/var/log/mympd.log}. The alternative is @code{'syslog}, which
-sends output to the running syslog service under the @samp{daemon} facility."
+   maybe-string
+   "Where to send logs.  Unless specified, the service logs to the local
+syslog service under the @samp{daemon} facility.  Alternatively, a log file
+name can be specified, for example @file{/var/log/mympd.log}."
+   (sanitizer mympd-log-to-sanitizer)
    empty-serializer)
 
   (lualibs
@@ -887,9 +912,9 @@ prompting a pin from the user.")
     (shepherd-service
      (documentation "Run the myMPD daemon.")
      (requirement `(loopback user-processes
-                             ,@(if (eq? log-to 'syslog)
-                                   '(syslog)
-                                   '())
+                             ,@(if (maybe-value-set? log-to)
+                                   '()
+                                   '(syslogd))
                              ,@shepherd-requirement))
      (provision '(mympd))
      (start
@@ -905,16 +930,12 @@ prompting a pin from the user.")
                   (unless (file-exists? directory)
                     (mkdir-p/perms directory user #o755)))
 
-                (for-each
-                 init-directory
-                 '#$(map dirname
-                         ;; XXX: Delete the potential 'syslog log-file value,
-                         ;; which is not a directory.
-                         (delete 'syslog
-                                 (filter-map maybe-value
-                                             (list log-to
-                                                   work-directory
-                                                   cache-directory))))))
+                (for-each init-directory
+                          '#$(map dirname (filter-map maybe-value
+                                                      (list log-to
+                                                            work-directory
+                                                            cache-directory)))))
+
               (make-forkexec-constructor
                `(#$(file-append package "/bin/mympd")
                  "--user" #$username
@@ -923,7 +944,7 @@ prompting a pin from the user.")
                  "--cachedir" #$cache-directory)
                #:environment-variables
                (list #$(format #f "MYMPD_LOGLEVEL=~a" log-level))
-               #:log-file #$(if (string? log-to) log-to #f)))))))))
+               #:log-file #$(maybe-value log-to)))))))))
 
 (define (mympd-accounts config)
   (match-record config <mympd-configuration> (user group)
@@ -934,8 +955,9 @@ prompting a pin from the user.")
       (list user group))))
 
 (define (mympd-log-rotation config)
-  (match-record config <mympd-configuration> (log-to)
-    (if (string? log-to)
+  (match-record config <mympd-configuration>
+    (log-to)
+    (if (maybe-value-set? log-to)
         (list (log-rotation
                (files (list log-to))))
         '())))