[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[shepherd] 04/04: Log to /dev/kmsg when running as root on GNU/Linux.
From: |
Ludovic Courtès |
Subject: |
[shepherd] 04/04: Log to /dev/kmsg when running as root on GNU/Linux. |
Date: |
Mon, 5 Mar 2018 11:46:24 -0500 (EST) |
civodul pushed a commit to branch master
in repository shepherd.
commit 6e57aa2a3d8c4da4d03a47bc22fd291460eaafb1
Author: Danny Milosavljevic <address@hidden>
Date: Mon Mar 5 16:02:47 2018 +0100
Log to /dev/kmsg when running as root on GNU/Linux.
* modules/shepherd/support.scm (default-logfile): Set /dev/kmsg when it
exists and we're root.
(default-logfile-date-format): Adjust format when using /dev/kmsg.
* modules/shepherd.scm (main): Redirect 'current-output-port' to the
bitbucket when LOGFILE is /dev/kmsg.
* doc/shepherd.texi (Invoking shepherd): Document the new behavior when
'--log-file' is omitted.
Co-authored-by: Ludovic Courtès <address@hidden>
---
doc/shepherd.texi | 11 ++++++++---
modules/shepherd.scm | 6 ++++++
modules/shepherd/support.scm | 10 ++++++++--
3 files changed, 22 insertions(+), 5 deletions(-)
diff --git a/doc/shepherd.texi b/doc/shepherd.texi
index 47005d5..01d8050 100644
--- a/doc/shepherd.texi
+++ b/doc/shepherd.texi
@@ -404,9 +404,14 @@ permissions are not as expected.
@itemx address@hidden
@cindex logging
@cindex log file
-Log output into @var{file}, or if @var{file} is not given,
address@hidden/var/log/shepherd.log} when running as superuser,
address@hidden/shepherd/shepherd.log} otherwise.
+Log output into @var{file}.
+
+The default behavior is to write to @file{/dev/kmsg} when running as
+superuser. This special device is GNU/Linux-specific; when it does not
+exist, write to @file{/var/log/shepherd.log} instead.
+
+For unprivileged users, the default log file is
address@hidden/shepherd/shepherd.log}.
@item address@hidden
When @command{shepherd} is ready to accept connections, write its PID to
@var{file} or
diff --git a/modules/shepherd.scm b/modules/shepherd.scm
index 0f21084..c869464 100644
--- a/modules/shepherd.scm
+++ b/modules/shepherd.scm
@@ -2,6 +2,7 @@
;; Copyright (C) 2013, 2014, 2016, 2018 Ludovic Courtès <address@hidden>
;; Copyright (C) 2002, 2003 Wolfgang Jährling <address@hidden>
;; Copyright (C) 2018 Carlo Zancanaro <address@hidden>
+;; Copyright (C) 2018 Danny Milosavljevic <address@hidden>
;;
;; This file is part of the GNU Shepherd.
;;
@@ -163,6 +164,11 @@
;; Enable logging as first action.
(start-logging logfile)
+ (when (string=? logfile "/dev/kmsg")
+ ;; By default we'd write both to /dev/kmsg and to stdout. Redirect
+ ;; stdout to the bitbucket so we don't log twice.
+ (set-current-output-port (%make-void-port "w")))
+
;; Send output to log and clients.
(set-current-output-port (make-shepherd-output-port))
diff --git a/modules/shepherd/support.scm b/modules/shepherd/support.scm
index d4b582f..45a2030 100644
--- a/modules/shepherd/support.scm
+++ b/modules/shepherd/support.scm
@@ -3,6 +3,7 @@
;; Copyright (C) 2013, 2014, 2016, 2018 Ludovic Courtès <address@hidden>
;; Copyright (C) 2002, 2003 Wolfgang Jährling <address@hidden>
;; Copyright (C) 2016 Mathieu Lirzin <address@hidden>
+;; Copyright (C) 2018 Danny Milosavljevic <address@hidden>
;;
;; This file is part of the GNU Shepherd.
;;
@@ -22,6 +23,7 @@
(define-module (shepherd support)
#:use-module (shepherd config)
#:use-module (ice-9 match)
+ #:use-module (ice-9 format)
#:export (call/ec
caught-error
assert
@@ -309,12 +311,16 @@ TARGET should be a string representing a filepath + name."
;; Logfile.
(define default-logfile
(if (zero? (getuid))
- (string-append %localstatedir "/log/shepherd.log")
+ (if (access? "/dev/kmsg" W_OK)
+ "/dev/kmsg"
+ (string-append %localstatedir "/log/shepherd.log"))
(string-append %user-config-dir "/shepherd.log")))
(define default-logfile-date-format
;; 'strftime' format string to prefix each entry in the log.
- "%Y-%m-%d %H:%M:%S ")
+ (if (string=? default-logfile "/dev/kmsg")
+ (format #f "shepherd[~d]: " (getpid))
+ "%Y-%m-%d %H:%M:%S "))
;; Configuration file.
(define (default-config-file)