static void log_single_line(WINDOW_REC *window, const char *server_tag, const char *target, int level, const char *text) { char windownum[MAX_INT_STRLEN]; char **targets, **tmp; LOG_REC *log; if (window != NULL) { /* save to log created with /WINDOW LOG */ ltoa(windownum, window->refnum); log = logs_find_item(LOG_ITEM_WINDOW_REFNUM, windownum, NULL, NULL); if (log != NULL) log_write_rec(log, text, level); } if (target == NULL) log_file_write(server_tag, NULL, level, text, FALSE); else { /* there can be multiple items separated with comma */ targets = g_strsplit(target, ",", -1); for (tmp = targets; *tmp != NULL; tmp++) log_file_write(server_tag, *tmp, level, text, FALSE); g_strfreev(targets); } }
void log_file_write(const char *server_tag, const char *item, int level, const char *str, int no_fallbacks) { GSList *tmp, *fallbacks; char *tmpstr; int found; g_return_if_fail(str != NULL); if (logs == NULL) return; fallbacks = NULL; found = FALSE; for (tmp = logs; tmp != NULL; tmp = tmp->next) { LOG_REC *rec = tmp->data; if (rec->handle == -1) continue; /* log not opened yet */ if ((level & rec->level) == 0) continue; if (rec->items == NULL) fallbacks = g_slist_append(fallbacks, rec); else if (item != NULL && log_item_find(rec, LOG_ITEM_TARGET, item, server_tag) != NULL) log_write_rec(rec, str, level); } if (!found && !no_fallbacks && fallbacks != NULL) { /* not found from any items, so write it to all main logs */ tmpstr = (level & MSGLEVEL_PUBLIC) && item != NULL ? g_strconcat(item, ": ", str, NULL) : g_strdup(str); for (tmp = fallbacks; tmp != NULL; tmp = tmp->next) log_write_rec(tmp->data, tmpstr, level); g_free(tmpstr); } g_slist_free(fallbacks); }
static void log_single_line(WINDOW_REC *window, const char *server_tag, const char *target, int level, const char *text) { char windownum[MAX_INT_STRLEN]; LOG_REC *log; if (window != NULL) { /* save to log created with /WINDOW LOG */ ltoa(windownum, window->refnum); log = logs_find_item(LOG_ITEM_WINDOW_REFNUM, windownum, NULL, NULL); if (log != NULL) log_write_rec(log, text, level); } log_file_write(server_tag, target, level, text, FALSE); }
static void sig_printtext_stripped(WINDOW_REC *window, void *server, const char *target, gpointer levelp, const char *text) { char windownum[MAX_INT_STRLEN]; LOG_REC *log; int level; level = GPOINTER_TO_INT(levelp); if (level == MSGLEVEL_NEVER) return; /* let autolog create the log records */ if ((autolog_level & level) && target != NULL && *target != '\0') autolog_log(server, target); /* save to log created with /WINDOW LOG */ ltoa(windownum, window->refnum); log = log_find_item(windownum); if (log != NULL) log_write_rec(log, text); /* save line to logs */ if (logs != NULL) log_write(target, level, text); }