83e1400e0c
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>
81 lines
1.7 KiB
Diff
81 lines
1.7 KiB
Diff
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;
|