syslog support for windows and mac
git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@4495 e016b1c5-ed68-44aa-a2f7-31cac88cffde
This commit is contained in:
+20
-7
@@ -12,6 +12,10 @@
|
||||
|
||||
static const int facilities[] = { LOG_LOCAL0, LOG_LOCAL1, LOG_LOCAL2, LOG_LOCAL3, LOG_LOCAL4, LOG_LOCAL5, LOG_LOCAL6, LOG_LOCAL7 };
|
||||
static const int levels[] = { LOG_DEBUG, LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERR };
|
||||
#else
|
||||
static const int levels[] = { 7, 7, 6, 4, 3 };
|
||||
ENetSocket logsock = ENET_SOCKET_NULL;
|
||||
ENetAddress logdest = { ENET_HOST_ANY, 514 };
|
||||
#endif
|
||||
|
||||
static const char *levelprefix[] = { "", "", "", "WARNING: ", "ERROR: " };
|
||||
@@ -35,15 +39,17 @@ bool initlogging(const char *identity, int facility_, int consolethres, int file
|
||||
timestamp = logtimestamp;
|
||||
if(consolethres >= 0) consolethreshold = min(consolethres, (int)ACLOG_NUM);
|
||||
if(filethres >= 0) filethreshold = min(filethres, (int)ACLOG_NUM);
|
||||
#ifdef AC_USE_SYSLOG
|
||||
if(syslogthres >= 0) syslogthreshold = min(syslogthres, (int)ACLOG_NUM);
|
||||
facility &= 7;
|
||||
s_sprintf(ident)("AssaultCube[%s]", identity);
|
||||
if(syslogthreshold < ACLOG_NUM)
|
||||
{
|
||||
facility &= 7;
|
||||
s_sprintf(ident)("AssaultCube[%s]", identity);
|
||||
#ifdef AC_USE_SYSLOG
|
||||
openlog(ident, LOG_NDELAY, facilities[facility]);
|
||||
}
|
||||
#else
|
||||
if((logsock = enet_socket_create(ENET_SOCKET_TYPE_DATAGRAM)) == ENET_SOCKET_NULL || enet_address_set_host(&logdest, "localhost") < 0) syslogthreshold = ACLOG_NUM;
|
||||
#endif
|
||||
}
|
||||
s_sprintf(filepath)("serverlog_%s_%s.txt", timestring(true), identity);
|
||||
if(fp) { fclose(fp); fp = NULL; }
|
||||
if(filethreshold < ACLOG_NUM)
|
||||
@@ -53,10 +59,8 @@ bool initlogging(const char *identity, int facility_, int consolethres, int file
|
||||
}
|
||||
s_sprintfd(msg)("logging started: console(%s), file(%s", levelname[consolethreshold], levelname[fp ? filethreshold : ACLOG_NUM]);
|
||||
if(fp) s_strcatf(msg, ", \"%s\"", filepath);
|
||||
#ifdef AC_USE_SYSLOG
|
||||
s_strcatf(msg, "), syslog(%s", levelname[syslogthreshold]);
|
||||
if(syslogthreshold < ACLOG_NUM) s_strcatf(msg, ", \"%s\", local%d", ident, facility);
|
||||
#endif
|
||||
s_strcatf(msg, "), timestamp(%s)", timestamp ? "ENABLED" : "DISABLED");
|
||||
enabled = consolethreshold < ACLOG_NUM || fp || syslogthreshold < ACLOG_NUM;
|
||||
if(enabled) printf("%s\n", msg);
|
||||
@@ -86,8 +90,17 @@ bool logline(int level, const char *msg, ...)
|
||||
if((p = strchr(l, '\n'))) *p = '\0';
|
||||
if(consolethreshold <= level) printf("%s%s%s\n", ts, ld, l);
|
||||
if(fp && filethreshold <= level) fprintf(fp, "%s%s%s\n", ts, ld, l);
|
||||
if(syslogthreshold <= level)
|
||||
#ifdef AC_USE_SYSLOG
|
||||
if(syslogthreshold <= level) syslog(levels[level], "%s", l);
|
||||
syslog(levels[level], "%s", l);
|
||||
#else
|
||||
{
|
||||
s_sprintfd(text)("<%d>%s: %s", (16 + facility) * 8 + levels[level], ident, l); // no TIMESTAMP, no hostname: syslog will add this
|
||||
ENetBuffer buf;
|
||||
buf.data = text;
|
||||
buf.dataLength = strlen(text);
|
||||
enet_socket_send(logsock, &logdest, &buf, 1);
|
||||
}
|
||||
#endif
|
||||
l = p + 1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user