Răsfoiți Sursa

xlog: add kemi xlog_facility function

(cherry-picked from commit e506b60c1045cfbd4485434165305fbc2fb57aa9)
Stefan-Cristian Mititelu 1 an în urmă
părinte
comite
5fea7e1738
1 a modificat fișierele cu 40 adăugiri și 11 ștergeri
  1. 40 11
      src/modules/xlog/xlog.c

+ 40 - 11
src/modules/xlog/xlog.c

@@ -877,8 +877,9 @@ error:
 /**
  * write message after evaluation of lmsg for pseudo-variables
  */
-int ki_xlog_ex(sip_msg_t *msg, int llevel, str *lmsg)
+int ki_xlog_ex(sip_msg_t *msg, str *lfacility, int llevel, str *lmsg)
 {
+	int lf = xlog_facility;
 	pv_elem_t *xmodel = NULL;
 	str txt = {0, 0};
 
@@ -895,13 +896,23 @@ int ki_xlog_ex(sip_msg_t *msg, int llevel, str *lmsg)
 		pv_elem_free_all(xmodel);
 		return -1;
 	}
-	LOG_FN(xlog_facility, llevel, _xlog_prefix, "%.*s", txt.len, txt.s);
+
+	if(lfacility != NULL) {
+		lfacility->s[lfacility->len] = '\0';
+		lf = str2facility(lfacility->s);
+		if(lf == -1) {
+			LM_WARN("invalid syslog facility %.*s, using default\n",
+					lfacility->len, lfacility->s);
+			lf = xlog_facility;
+		}
+	}
+	LOG_FN(lf, llevel, _xlog_prefix, "%.*s", txt.len, txt.s);
 	;
 	pv_elem_free_all(xmodel);
 	return 1;
 }
 
-int ki_xlog(sip_msg_t *msg, str *slevel, str *lmsg)
+int ki_xlog_get_level(str *slevel)
 {
 	int llevel;
 
@@ -926,42 +937,55 @@ int ki_xlog(sip_msg_t *msg, str *slevel, str *lmsg)
 	} else {
 		llevel = L_ERR;
 	}
-	return ki_xlog_ex(msg, llevel, lmsg);
+
+	return llevel;
+}
+
+int ki_xlog_facility(sip_msg_t *msg, str *lfacility, str *slevel, str *lmsg)
+{
+	int llevel = ki_xlog_get_level(slevel);
+	return ki_xlog_ex(msg, lfacility, llevel, lmsg);
+}
+
+int ki_xlog(sip_msg_t *msg, str *slevel, str *lmsg)
+{
+	int llevel = ki_xlog_get_level(slevel);
+	return ki_xlog_ex(msg, NULL, llevel, lmsg);
 }
 
 int ki_xdbg(sip_msg_t *msg, str *lmsg)
 {
-	return ki_xlog_ex(msg, L_DBG, lmsg);
+	return ki_xlog_ex(msg, NULL, L_DBG, lmsg);
 }
 
 int ki_xerr(sip_msg_t *msg, str *lmsg)
 {
-	return ki_xlog_ex(msg, L_ERR, lmsg);
+	return ki_xlog_ex(msg, NULL, L_ERR, lmsg);
 }
 
 int ki_xinfo(sip_msg_t *msg, str *lmsg)
 {
-	return ki_xlog_ex(msg, L_INFO, lmsg);
+	return ki_xlog_ex(msg, NULL, L_INFO, lmsg);
 }
 
 int ki_xnotice(sip_msg_t *msg, str *lmsg)
 {
-	return ki_xlog_ex(msg, L_NOTICE, lmsg);
+	return ki_xlog_ex(msg, NULL, L_NOTICE, lmsg);
 }
 
 int ki_xwarn(sip_msg_t *msg, str *lmsg)
 {
-	return ki_xlog_ex(msg, L_WARN, lmsg);
+	return ki_xlog_ex(msg, NULL, L_WARN, lmsg);
 }
 
 int ki_xalert(sip_msg_t *msg, str *lmsg)
 {
-	return ki_xlog_ex(msg, L_ALERT, lmsg);
+	return ki_xlog_ex(msg, NULL, L_ALERT, lmsg);
 }
 
 int ki_xcrit(sip_msg_t *msg, str *lmsg)
 {
-	return ki_xlog_ex(msg, L_CRIT, lmsg);
+	return ki_xlog_ex(msg, NULL, L_CRIT, lmsg);
 }
 
 /**
@@ -1009,6 +1033,11 @@ static sr_kemi_t sr_kemi_xlog_exports[] = {
 		{ SR_KEMIP_STR, SR_KEMIP_STR, SR_KEMIP_NONE,
 			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
 	},
+	{ str_init("xlog"), str_init("xlog_facility"),
+		SR_KEMIP_INT, ki_xlog_facility,
+		{ SR_KEMIP_STR, SR_KEMIP_STR, SR_KEMIP_STR,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
 
 	{ {0, 0}, {0, 0}, 0, NULL, { 0, 0, 0, 0, 0, 0 } }
 };