Exemple #1
0
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);
	}
}
Exemple #2
0
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);
}
Exemple #3
0
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);
}
Exemple #4
0
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);
}