diff options
author | aszlig <aszlig@redmoonstudios.org> | 2017-04-23 19:02:50 +0200 |
---|---|---|
committer | aszlig <aszlig@redmoonstudios.org> | 2017-04-23 19:25:23 +0200 |
commit | 83e1400e0ce762a9932041977e3c9b90f049425b (patch) | |
tree | 2d074e7aaccded16c8cade9c4e22ec12c33efd2f /pkgs/applications/display-managers/slim | |
parent | dcc61da97c7223dd30562145a7294e2e40b8741f (diff) | |
download | nixlib-83e1400e0ce762a9932041977e3c9b90f049425b.tar nixlib-83e1400e0ce762a9932041977e3c9b90f049425b.tar.gz nixlib-83e1400e0ce762a9932041977e3c9b90f049425b.tar.bz2 nixlib-83e1400e0ce762a9932041977e3c9b90f049425b.tar.lz nixlib-83e1400e0ce762a9932041977e3c9b90f049425b.tar.xz nixlib-83e1400e0ce762a9932041977e3c9b90f049425b.tar.zst nixlib-83e1400e0ce762a9932041977e3c9b90f049425b.zip |
nixos/slim: Implement logging to journal
The main change here is a patch of SLiM to tread a log file of /dev/stderr specially in that it now uses std::cerr instead of a file for logging. This allows us to set the logfile to stderr in NixOS for the generated SLiM configuration file and we now get logging to the systemd journal. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
Diffstat (limited to 'pkgs/applications/display-managers/slim')
-rw-r--r-- | pkgs/applications/display-managers/slim/default.nix | 4 | ||||
-rw-r--r-- | pkgs/applications/display-managers/slim/no-logfile.patch | 80 |
2 files changed, 84 insertions, 0 deletions
diff --git a/pkgs/applications/display-managers/slim/default.nix b/pkgs/applications/display-managers/slim/default.nix index fca84199e511..c75a8976b3fa 100644 --- a/pkgs/applications/display-managers/slim/default.nix +++ b/pkgs/applications/display-managers/slim/default.nix @@ -22,6 +22,10 @@ stdenv.mkDerivation rec { # Ensure that sessions appear in sort order, rather than in # directory order. ./sort-sessions.patch + + # Allow to set logfile to a special "/dev/stderr" in order to continue + # logging to stderr and thus to the journal. + ./no-logfile.patch ]; preConfigure = "substituteInPlace CMakeLists.txt --replace /lib $out/lib"; diff --git a/pkgs/applications/display-managers/slim/no-logfile.patch b/pkgs/applications/display-managers/slim/no-logfile.patch new file mode 100644 index 000000000000..f2f5f1549930 --- /dev/null +++ b/pkgs/applications/display-managers/slim/no-logfile.patch @@ -0,0 +1,80 @@ +diff --git a/log.cpp b/log.cpp +index b44677a..7c89dda 100644 +--- a/log.cpp ++++ b/log.cpp +@@ -1,23 +1,31 @@ + #include "log.h" + #include <iostream> ++#include <cstring> + + bool + LogUnit::openLog(const char * filename) + { +- if (logFile.is_open()) { ++ if (isFile && logFile.is_open()) { + cerr << APPNAME + << ": opening a new Log file, while another is already open" + << endl; +- logFile.close(); ++ closeLog(); + } +- logFile.open(filename, ios_base::app); + +- return !(logFile.fail()); ++ if (strcmp(filename, "/dev/stderr") == 0) { ++ isFile = false; ++ return true; ++ } else { ++ logFile.open(filename, ios_base::app); ++ isFile = true; ++ return !(logFile.fail()); ++ } + } + + void + LogUnit::closeLog() + { ++ if (!isFile) return; + if (logFile.is_open()) + logFile.close(); + } +diff --git a/log.h b/log.h +index b7810be..ad548a2 100644 +--- a/log.h ++++ b/log.h +@@ -9,11 +9,14 @@ + #endif + #include "const.h" + #include <fstream> ++#include <iostream> + + using namespace std; + + static class LogUnit { + ofstream logFile; ++ bool isFile; ++ inline ostream &getStream() { return isFile ? logFile : cerr; } + public: + bool openLog(const char * filename); + void closeLog(); +@@ -22,17 +25,17 @@ public: + + template<typename Type> + LogUnit & operator<<(const Type & text) { +- logFile << text; logFile.flush(); ++ getStream() << text; getStream().flush(); + return *this; + } + + LogUnit & operator<<(ostream & (*fp)(ostream&)) { +- logFile << fp; logFile.flush(); ++ getStream() << fp; getStream().flush(); + return *this; + } + + LogUnit & operator<<(ios_base & (*fp)(ios_base&)) { +- logFile << fp; logFile.flush(); ++ getStream() << fp; getStream().flush(); + return *this; + } + } logStream; |