Пример #1
0
static void rotate_log()
{
	time_t rawtime;
	struct tm * timeinfo;
	
	time(&rawtime);
	timeinfo = localtime(&rawtime);
	
	// rotate log next day at 00:00:00
	timeinfo->tm_hour = timeinfo->tm_min = timeinfo->tm_sec = 0;
	
	log_rotate_time = mktime(timeinfo);
	log_rotate_time += 60 * 60 * 24; // +24h
	
	// change filename
	
	char filename[256];
    strftime(filename, arrayof(filename), LOG_FILENAME, timeinfo);
	logger_file_open(filename);
	assert(log_file != NULL);
}
Пример #2
0
int
logger_open(
    log_level_t level,
    const char *type,
    const char *ident,
    int option,
    const char *facility,
    const char *logfile)
{
	int error = 0;
	char *dup_logfile = NULL;

	ASSERT(g_logger != NULL);
	ASSERT(type != NULL);

	if (strcasecmp(type, "file") == 0 &&
	    (logfile == NULL || logfile[0] == '\0')) {
		errno = EINVAL;
		return 1;
	}
	if (logfile && logfile != '\0') {
		dup_logfile = strdup(logfile);
		if (dup_logfile == NULL) {
			return 1;
		}
	}
	if (g_logger->log_state == LOG_ST_OPENED) {
		if (g_logger->log_type == LOG_TYPE_VALUE_FILE) {
			if (g_logger->log == NULL) {
				fprintf(stderr,
				    "did not opened log file %s.",
				    g_logger->logfilename);
			} else {
				fclose(g_logger->log);
				g_logger->log = NULL;
			}
			free(g_logger->logfilename);
			g_logger->logfilename = NULL;
		} else if (g_logger->log_type == LOG_TYPE_VALUE_SYSLOG) {
			closelog();
		}
		g_logger->log_state = LOG_ST_CLOSED;
		g_logger->log_type = LOG_TYPE_VALUE_STDERR;
	}
	if (strcasecmp(type, LOG_TYPE_FILE) == 0) {
		if (logger_file_open(dup_logfile)) {
			g_logger->log_type = LOG_TYPE_VALUE_STDERR;
		} else {
			g_logger->log_type = LOG_TYPE_VALUE_FILE;
			g_logger->logfilename = dup_logfile;
		}
	} else if (strcasecmp(type, LOG_TYPE_SYSLOG) == 0) {
		logger_syslog_open(ident, option, facility);
		g_logger->log_type = LOG_TYPE_VALUE_SYSLOG;
	} else if (strcasecmp(type, LOG_TYPE_STDOUT) == 0) {
		g_logger->log_type = LOG_TYPE_VALUE_STDOUT;
	} else {
		g_logger->log_type = LOG_TYPE_VALUE_STDERR;
	}
	g_logger->log_state = LOG_ST_OPENED;
	if (g_logger->log_type != LOG_TYPE_VALUE_FILE) {
		free(dup_logfile);
	}
	if (level > LOG_LV_MIN && level < LOG_LV_MAX) {
		g_logger->verbose_level = level;
	} else {
		g_logger->verbose_level = DEFAULT_VERBOSE_LEVEL;
	}
	g_logger->pid = getpid();
	if (error) {
		free(dup_logfile);
	} else {
		if (g_logger->verbose_level >= LOG_LV_DEBUG) {
			LOG(LOG_LV_DEBUG,
			    "logging info: type = %d, level %d, state %d, pid %d",
			    g_logger->log_type,
			    g_logger->verbose_level,
			    g_logger->log_state,
			    g_logger->pid);
		}
	}

	return error;
}