mirror of
https://github.com/badaix/snapcast.git
synced 2025-08-04 00:59:32 +02:00
loggong
git-svn-id: svn://elaine/murooma/trunk@190 d8a302eb-03bc-478d-80e4-98257eca68ef
This commit is contained in:
parent
18ec79e97a
commit
0f49d851b9
7 changed files with 130 additions and 43 deletions
35
common/log.cpp
Normal file
35
common/log.cpp
Normal file
|
@ -0,0 +1,35 @@
|
|||
#include "log.h"
|
||||
|
||||
Log::Log(std::string ident, int facility) {
|
||||
facility_ = facility;
|
||||
priority_ = LOG_DEBUG;
|
||||
strncpy(ident_, ident.c_str(), sizeof(ident_));
|
||||
ident_[sizeof(ident_)-1] = '\0';
|
||||
|
||||
openlog(ident_, LOG_PID, facility_);
|
||||
}
|
||||
|
||||
int Log::sync() {
|
||||
if (buffer_.length()) {
|
||||
syslog(priority_, buffer_.c_str());
|
||||
buffer_.erase();
|
||||
priority_ = LOG_DEBUG; // default to debug for each message
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Log::overflow(int c) {
|
||||
if (c != EOF) {
|
||||
buffer_ += static_cast<char>(c);
|
||||
} else {
|
||||
sync();
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
std::ostream& operator<< (std::ostream& os, const LogPriority& log_priority) {
|
||||
static_cast<Log *>(os.rdbuf())->priority_ = (int)log_priority;
|
||||
return os;
|
||||
}
|
||||
|
||||
|
41
common/log.h
Normal file
41
common/log.h
Normal file
|
@ -0,0 +1,41 @@
|
|||
#ifndef LOG_H
|
||||
#define LOG_H
|
||||
|
||||
#include <syslog.h>
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
|
||||
|
||||
enum LogPriority {
|
||||
kLogEmerg = LOG_EMERG, // system is unusable
|
||||
kLogAlert = LOG_ALERT, // action must be taken immediately
|
||||
kLogCrit = LOG_CRIT, // critical conditions
|
||||
kLogErr = LOG_ERR, // error conditions
|
||||
kLogWarning = LOG_WARNING, // warning conditions
|
||||
kLogNotice = LOG_NOTICE, // normal, but significant, condition
|
||||
kLogInfo = LOG_INFO, // informational message
|
||||
kLogDebug = LOG_DEBUG // debug-level message
|
||||
};
|
||||
|
||||
std::ostream& operator<< (std::ostream& os, const LogPriority& log_priority);
|
||||
|
||||
class Log : public std::basic_streambuf<char, std::char_traits<char> > {
|
||||
public:
|
||||
explicit Log(std::string ident, int facility);
|
||||
|
||||
protected:
|
||||
int sync();
|
||||
int overflow(int c);
|
||||
|
||||
private:
|
||||
friend std::ostream& operator<< (std::ostream& os, const LogPriority& log_priority);
|
||||
std::string buffer_;
|
||||
int facility_;
|
||||
int priority_;
|
||||
char ident_[50];
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
BIN
common/log.o
Normal file
BIN
common/log.o
Normal file
Binary file not shown.
|
@ -47,6 +47,48 @@ std::vector<std::string> split(const std::string& str)
|
|||
}
|
||||
|
||||
|
||||
static void daemonize()
|
||||
{
|
||||
/* Our process ID and Session ID */
|
||||
pid_t pid, sid;
|
||||
|
||||
/* Fork off the parent process */
|
||||
pid = fork();
|
||||
if (pid < 0)
|
||||
exit(EXIT_FAILURE);
|
||||
|
||||
/* If we got a good PID, then
|
||||
we can exit the parent process. */
|
||||
if (pid > 0)
|
||||
exit(EXIT_SUCCESS);
|
||||
|
||||
/* Change the file mode mask */
|
||||
umask(0);
|
||||
|
||||
/* Open any logs here */
|
||||
|
||||
/* Create a new SID for the child process */
|
||||
sid = setsid();
|
||||
if (sid < 0)
|
||||
{
|
||||
/* Log the failure */
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
/* Change the current working directory */
|
||||
if ((chdir("/")) < 0)
|
||||
{
|
||||
/* Log the failure */
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
/* Close out the standard file descriptors */
|
||||
close(STDIN_FILENO);
|
||||
close(STDOUT_FILENO);
|
||||
close(STDERR_FILENO);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue