#define MAXLOGSIZE 512
#define LOGLEVEL_STRING_IDENTIFIERS { \
- "LOG_NOTHING", \
- "LOG_SEVERE", \
- "LOG_ERROR", \
- "LOG_WARN", \
- "LOG_NOTE", \
- "LOG_INFO", \
- "LOG_DEBUG", \
- "LOG_DEBUG6", \
- "LOG_DEBUG7", \
- "LOG_DEBUG8", \
- "LOG_DEBUG9", \
- "LOG_MAXDEBUG"}
+ "NOTHING", \
+ "SEVERE", \
+ "ERROR", \
+ "WARN", \
+ "NOTE", \
+ "INFO", \
+ "DEBUG", \
+ "DEBUG6", \
+ "DEBUG7", \
+ "DEBUG8", \
+ "DEBUG9", \
+ "MAXDEBUG"}
/* these are the string identifiers corresponding to each logtype */
#define LOGTYPE_STRING_IDENTIFIERS { \
DEFAULT_LOG_CONFIG /* logtype_uams */
};
+static void syslog_setup(int loglevel, enum logtypes logtype, int display_options, int facility);
+
/* We use this in order to track the last n log messages in order to prevent flooding */
#define LOG_FLOODING_MINCOUNT 5 /* this controls after how many consecutive messages must be detected
before we start to hide them */
#define LOG_FLOODING_MAXCOUNT 1000 /* this controls after how many consecutive messages we force a
"repeated x times" message */
#define LOG_FLOODING_ARRAY_SIZE 3 /* this contols how many messages in flow we track */
+
struct log_flood_entry {
int count;
unsigned int hash;
};
+
static struct log_flood_entry log_flood_array[LOG_FLOODING_ARRAY_SIZE];
static int log_flood_entries;
save = ptr = strdup(logstr);
- while (*ptr) {
- while (*ptr && isspace(*ptr))
- ptr++;
+ ptr = strtok(ptr, ", ");
- logtype = ptr;
- ptr = strpbrk(ptr, ":");
- if (!ptr)
- break;
- *ptr = 0;
+ while (ptr) {
+ while (*ptr) {
+ while (*ptr && isspace(*ptr))
+ ptr++;
+
+ logtype = ptr;
+ ptr = strpbrk(ptr, ":");
+ if (!ptr)
+ break;
+ *ptr = 0;
- ptr++;
- loglevel = ptr;
- while (*ptr && !isspace(*ptr))
ptr++;
- c = *ptr;
- *ptr = 0;
- setuplog_internal(loglevel, logtype, filename);
- *ptr = c;
+ loglevel = ptr;
+ while (*ptr && !isspace(*ptr))
+ ptr++;
+ c = *ptr;
+ *ptr = 0;
+ setuplog_internal(loglevel, logtype, logfile);
+ *ptr = c;
+ }
+ ptr = strtok(NULL, ", ");
}
free(save);