static xmpp_log_level_t _get_xmpp_log_level() { log_level_t prof_level = log_get_filter(); if (prof_level == PROF_LEVEL_DEBUG) { return XMPP_LEVEL_DEBUG; } else if (prof_level == PROF_LEVEL_INFO) { return XMPP_LEVEL_INFO; } else if (prof_level == PROF_LEVEL_WARN) { return XMPP_LEVEL_WARN; } else { return XMPP_LEVEL_ERROR; } }
static xmpp_log_t* _xmpp_get_file_logger(void) { log_level_t prof_level = log_get_filter(); xmpp_log_level_t xmpp_level = XMPP_LEVEL_ERROR; switch (prof_level) { case PROF_LEVEL_DEBUG: xmpp_level = XMPP_LEVEL_DEBUG; break; case PROF_LEVEL_INFO: xmpp_level = XMPP_LEVEL_INFO; break; case PROF_LEVEL_WARN: xmpp_level = XMPP_LEVEL_WARN; break; default: xmpp_level = XMPP_LEVEL_ERROR; break; } xmpp_log_t *file_log = malloc(sizeof(xmpp_log_t)); file_log->handler = _xmpp_file_logger; file_log->userdata = &xmpp_level; return file_log; }
static void _rotate_log_file(void) { gchar *log_file = _get_log_file(); size_t len = strlen(log_file); char *log_file_new = malloc(len + 3); strncpy(log_file_new, log_file, len); log_file_new[len] = '.'; log_file_new[len+1] = '1'; log_file_new[len+2] = 0; log_close(); rename(log_file, log_file_new); log_init(log_get_filter()); free(log_file_new); free(log_file); log_info("Log has been rotated"); }