diff options
author | David Oberhollenzer <david.oberhollenzer@tele2.at> | 2018-08-15 23:50:41 +0200 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@tele2.at> | 2018-08-16 13:31:13 +0200 |
commit | 4311b9a2f14ee411ec3dc8b050f8efa25afa0bc5 (patch) | |
tree | 793c473392fc7cfd7915e6fc8a5aee5a121d5926 /syslogd/main.c | |
parent | 0624f95de639a41e8a47c264cdb7387a386a4dcd (diff) |
usyslogd: create abstraction for log stream management
This commit seperates the formating and printing of log messages to files
more cleanly from the message pump that retrieves the log messages.
At a later point, other backends could be added more easiyl (e.g. forward
the log message to some server).
Signed-off-by: David Oberhollenzer <david.oberhollenzer@tele2.at>
Diffstat (limited to 'syslogd/main.c')
-rw-r--r-- | syslogd/main.c | 126 |
1 files changed, 4 insertions, 122 deletions
diff --git a/syslogd/main.c b/syslogd/main.c index b98c414..8f11906 100644 --- a/syslogd/main.c +++ b/syslogd/main.c @@ -25,75 +25,16 @@ #include <errno.h> #include <stdio.h> -#include "logfile.h" +#include "backend.h" #include "proto.h" #include "util.h" #define SYSLOG_SOCKET "/dev/log" -#define SYSLOG_PATH "/var/log" static volatile sig_atomic_t syslog_run = 1; -static logfile_t *logfiles = NULL; - -static const enum_map_t facilities[] = { - { "kernel.log", 0 }, - { "user.log", 1 }, - { "mail.log", 2 }, - { "daemon.log", 3 }, - { "auth.log", 4 }, - { "syslog.log", 5 }, - { "lpr.log", 6 }, - { "news.log", 7 }, - { "uucp.log", 8 }, - { "clock.log", 9 }, - { "authpriv.log", 10 }, - { "ftp.log", 11 }, - { "ntp.log", 12 }, - { "audit.log", 13 }, - { "alert.log", 14 }, - { "cron.log", 15 }, - { "local0.log", 16 }, - { "local1.log", 17 }, - { "local2.log", 18 }, - { "local3.log", 19 }, - { "local4.log", 20 }, - { "local5.log", 21 }, - { "local6.log", 22 }, - { "local7.log", 23 }, - { NULL, 0 }, -}; - -static const enum_map_t levels[] = { - { "emergency", 0 }, - { "alert", 1 }, - { "critical", 2 }, - { "error", 3 }, - { "warning", 4 }, - { "notice", 5 }, - { "info", 6 }, - { "debug", 7 }, - { NULL, 0 }, -}; - - -static int directory_setup(void) -{ - if (mkdir(SYSLOG_PATH, 0755)) { - if (errno != EEXIST) { - perror("mkdir " SYSLOG_PATH); - return -1; - } - } - - if (chdir(SYSLOG_PATH)) { - perror("cd " SYSLOG_PATH); - return -1; - } - return 0; -} static void sighandler(int signo) { @@ -118,59 +59,6 @@ static void signal_setup(void) sigaction(SIGTERM, &act, NULL); } -static int print_to_log(const syslog_msg_t *msg) -{ - const char *fac_name, *lvl_str; - char timebuf[32], *filename; - logfile_t *log; - struct tm tm; - size_t len; - - fac_name = enum_to_name(facilities, msg->facility); - if (fac_name == NULL) - return -1; - - lvl_str = enum_to_name(levels, msg->level); - if (lvl_str == NULL) - return -1; - - if (msg->ident) { - len = strlen(msg->ident) + 1 + strlen(fac_name) + 1; - filename = alloca(len); - sprintf(filename, "%s/%s", msg->ident, fac_name); - } else { - filename = (char *)fac_name; - } - - for (log = logfiles; log != NULL; log = log->next) { - if (log->facility != msg->facility) - continue; - if (strcmp(filename, log->filename) == 0) - break; - } - - if (log == NULL) { - if (msg->ident != NULL && mkdir(msg->ident, 0750) != 0 && - errno != EEXIST) { - perror(msg->ident); - return -1; - } - - log = logfile_create(filename, msg->facility); - if (log == NULL) - return -1; - log->next = logfiles; - logfiles = log; - } - - gmtime_r(&msg->timestamp, &tm); - strftime(timebuf, sizeof(timebuf), "%FT%T", &tm); - - logfile_write(log, "[%s][%s][%u] %s", timebuf, lvl_str, msg->pid, - msg->message); - return 0; -} - static int handle_data(int fd) { char buffer[2048]; @@ -186,13 +74,12 @@ static int handle_data(int fd) if (syslog_msg_parse(&msg, buffer)) return -1; - return print_to_log(&msg); + return logmgr->write(logmgr, &msg); } int main(void) { int sfd, status = EXIT_FAILURE; - logfile_t *log; signal_setup(); @@ -200,7 +87,7 @@ int main(void) if (sfd < 0) return EXIT_FAILURE; - if (directory_setup()) + if (logmgr->init(logmgr)) goto out; while (syslog_run) { @@ -209,12 +96,7 @@ int main(void) status = EXIT_SUCCESS; out: - while (logfiles != NULL) { - log = logfiles; - logfiles = logfiles->next; - - logfile_destroy(log); - } + logmgr->cleanup(logmgr); if (sfd > 0) close(sfd); unlink(SYSLOG_SOCKET); |