Hi,
I have a patch proposal for the syslog severity text property: an
addition to make strings shorter than "warning" space padded up to the
width/length of said "warning". I thought at first about a generic
solution that could apply to any field, but by quickly looking at the
code and how it's handled, my impression was that it would require quite
a bit more work and seemed to increase complexity compared to this
solution.
I imagine that the severity text is the one field (except for the msg
part) that actually changes width between messages in normal cases, so
that's why I chose the simplest solution I could imagine (and cheapest
since its strings literals).
What do you guys think?
Regards,
Jonny
---
rsyslog/runtime/msg.c | 26 ++++++++++++++++++++++++++
rsyslog/runtime/typedefs.h | 19 ++++++++++---------
2 files changed, 36 insertions(+), 9 deletions(-)
diff --git a/rsyslog/runtime/msg.c b/rsyslog/runtime/msg.c
index e25543a..e38d77a 100644
--- a/rsyslog/runtime/msg.c
+++ b/rsyslog/runtime/msg.c
@@ -385,6 +385,8 @@ static short len_syslog_fac_names[LOG_NFACILITIES] = { 4, 4, 4, 6, 4, 6, 3,
/* table of severity names (in numerical order)*/
static char *syslog_severity_names[8] = { "emerg", "alert", "crit", "err", "warning", "notice", "info", "debug" };
+/* table of severity names (in numerical order), space padded if needed to longest severity string ("warning") */
+static char *syslog_severity_names_padded[8] = { "emerg ", "alert ", "crit ", "err ", "warning", "notice ", "info ", "debug " };
static short len_syslog_severity_names[8] = { 5, 5, 4, 3, 7, 6, 4, 5 };
/* numerical values as string - this is the most efficient approach to convert severity
@@ -569,6 +571,8 @@ propNameToID(uchar *pName, propid_t *pPropID)
*pPropID = PROP_SYSLOGSEVERITY;
} else if(!strcmp((char*) pName, "syslogseverity-text") || !strcmp((char*) pName, "syslogpriority-text")) {
*pPropID = PROP_SYSLOGSEVERITY_TEXT;
+ } else if(!strcmp((char*) pName, "syslogseverity-text-padded")) {
+ *pPropID = PROP_SYSLOGSEVERITY_TEXT_PADDED;
} else if(!strcmp((char*) pName, "timegenerated")) {
*pPropID = PROP_TIMEGENERATED;
} else if(!strcmp((char*) pName, "programname")) {
@@ -668,6 +672,8 @@ uchar *propIDToName(propid_t propID)
return UCHAR_CONSTANT("syslogseverity");
case PROP_SYSLOGSEVERITY_TEXT:
return UCHAR_CONSTANT("syslogseverity-text");
+ case PROP_SYSLOGSEVERITY_TEXT_PADDED:
+ return UCHAR_CONSTANT("syslogseverity-text-padded");
case PROP_TIMEGENERATED:
return UCHAR_CONSTANT("timegenerated");
case PROP_PROGRAMNAME:
@@ -1872,6 +1878,23 @@ static inline char *getSeverityStr(msg_t * const pM)
return name;
}
+
+static inline char *getSeverityStrPadded(msg_t * const pM)
+{
+ char *name = NULL;
+
+ if(pM == NULL)
+ return "";
+
+ if(pM->iSeverity > 7) {
+ name = "invld ";
+ } else {
+ name = syslog_severity_names_padded[pM->iSeverity];
+ }
+
+ return name;
+}
+
static inline char *getFacility(msg_t * const pM)
{
char *name = NULL;
@@ -3160,6 +3183,9 @@ uchar *MsgGetProp(msg_t *__restrict__ const pMsg, struct templateEntry *__restri
case PROP_SYSLOGSEVERITY_TEXT:
pRes = (uchar*)getSeverityStr(pMsg);
break;
+ case PROP_SYSLOGSEVERITY_TEXT_PADDED:
+ pRes = (uchar*)getSeverityStrPadded(pMsg);
+ break;
case PROP_TIMEGENERATED:
if (pTpe != NULL)
datefmt = pTpe->data.field.eDateFormat;
diff --git a/rsyslog/runtime/typedefs.h b/rsyslog/runtime/typedefs.h
index e50191f..ff2a202 100644
--- a/rsyslog/runtime/typedefs.h
+++ b/rsyslog/runtime/typedefs.h
@@ -185,15 +185,16 @@ typedef uintTiny propid_t;
#define PROP_SYSLOGFACILITY_TEXT 13
#define PROP_SYSLOGSEVERITY 14
#define PROP_SYSLOGSEVERITY_TEXT 15
-#define PROP_TIMEGENERATED 16
-#define PROP_PROGRAMNAME 17
-#define PROP_PROTOCOL_VERSION 18
-#define PROP_STRUCTURED_DATA 19
-#define PROP_APP_NAME 20
-#define PROP_PROCID 21
-#define PROP_MSGID 22
-#define PROP_PARSESUCCESS 23
-#define PROP_JSONMESG 24
+#define PROP_SYSLOGSEVERITY_TEXT_PADDED 16
+#define PROP_TIMEGENERATED 17
+#define PROP_PROGRAMNAME 18
+#define PROP_PROTOCOL_VERSION 19
+#define PROP_STRUCTURED_DATA 20
+#define PROP_APP_NAME 21
+#define PROP_PROCID 22
+#define PROP_MSGID 23
+#define PROP_PARSESUCCESS 24
+#define PROP_JSONMESG 25
#define PROP_SYS_NOW 150
#define PROP_SYS_YEAR 151
#define PROP_SYS_MONTH 152
--
2.4.1
_______________________________________________
rsyslog mailing list
http://lists.adiscon.net/mailman/listinfo/rsyslog
http://www.rsyslog.com/professional-services/
What's up with rsyslog? Follow https://twitter.com/rgerhards
NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a myriad of
sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you DON'T LIKE
THAT.