From 5619e04cbab660b95932d91e01c70484cf4247f5 Mon Sep 17 00:00:00 2001 From: driAn Date: Tue, 13 May 2008 20:48:17 +0000 Subject: [PATCH] syslog support for AC on linux (default) git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@1953 e016b1c5-ed68-44aa-a2f7-31cac88cffde --- source/src/log.cpp | 47 ++++++++++++++++++++++++++++++++++++++----- source/src/protos.h | 2 +- source/src/server.cpp | 5 +++-- 3 files changed, 46 insertions(+), 8 deletions(-) diff --git a/source/src/log.cpp b/source/src/log.cpp index 3d0504ff..1f2fcd1d 100644 --- a/source/src/log.cpp +++ b/source/src/log.cpp @@ -39,16 +39,53 @@ struct filelog : log }; -struct syslog : log +#if !defined(WIN32) && !defined(__APPLE__) + +#include +#include + +struct posixsyslog : log { + int facility; + string ident; + + posixsyslog(int facility, const char *ident) + { + this->facility = facility; + s_strcpy(this->ident, ident); + + openlog(this->ident, LOG_NDELAY, this->facility); + } + + ~posixsyslog() + { + closelog(); + } + virtual void writeline(int level, const char *msg, ...) { - + if(!enabled) return; + s_sprintfdv(sf, msg); + s_sprintfd(out)("%s\n", sf); + filtertext(out, out); + int l = (level==log::info ? LOG_INFO : ( level==log::warning ? LOG_WARNING : LOG_ERR)); + syslog(l, out); + if(console) puts(out); } }; - -struct log *newlogger() +struct log *newlogger(const char *identity) { - return new filelog("serverlog.txt"); + s_sprintfd(id)("AssaultCube %s", identity); + return new posixsyslog(LOG_LOCAL6, id); } + +#else + +struct log *newlogger(const char *identity) +{ + s_sprintfd(file)("serverlog_%s.txt", identity); + return new filelog(file); +} + +#endif diff --git a/source/src/protos.h b/source/src/protos.h index 3fac4387..411abf85 100644 --- a/source/src/protos.h +++ b/source/src/protos.h @@ -572,5 +572,5 @@ struct log virtual void writeline(int level, const char *msg, ...) = 0; }; -extern struct log *newlogger(); +extern struct log *newlogger(const char *identity); diff --git a/source/src/server.cpp b/source/src/server.cpp index 446b3a2a..1309a839 100644 --- a/source/src/server.cpp +++ b/source/src/server.cpp @@ -2228,8 +2228,9 @@ void initserver(bool dedicated, int uprate, const char *sdesc, const char *ip, i if(passwd) s_strcpy(serverpassword, passwd); maxclients = maxcl > 0 ? min(maxcl, MAXCLIENTS) : DEFAULTCLIENTS; servermsinit(master ? master : AC_MASTER_URI, ip, CUBE_SERVINFO_PORT(serverport), sdesc, dedicated); - - logger = newlogger(); + + s_sprintfd(identity)("%s/%d", ip && ip[0] ? ip : "local", serverport); + logger = newlogger(identity); logger->enabled = dedicated; // log on ded servers only logger->writeline(log::info, "logging local AssaultCube Server now..");