Module: sip-router
Branch: master
Commit: a5a58239efb00f25cd51753c984ee4469fd97754
URL:
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=a5a5823…
Author: Elena-Ramona Modroiu <ramona(a)asipto.com>
Committer: Elena-Ramona Modroiu <ramona(a)asipto.com>
Date: Mon Sep 3 08:53:47 2012 +0200
xlog: new module parameters log_colors
- update the colorscheme for log levels
---
modules_k/xlog/README | 44 ++++++++++++++-----
modules_k/xlog/doc/xlog_admin.xml | 23 ++++++++++
modules_k/xlog/xlog.c | 83 +++++++++++++++++++++++++++++++++++++
3 files changed, 138 insertions(+), 12 deletions(-)
diff --git a/modules_k/xlog/README b/modules_k/xlog/README
index cafb535..00b28d7 100644
--- a/modules_k/xlog/README
+++ b/modules_k/xlog/README
@@ -11,9 +11,9 @@ Elena-Ramona Modroiu
<ramona(a)rosdev.ro>
- Copyright � 2003 FhG FOKUS
+ Copyright © 2003 FhG FOKUS
- Copyright � 2008-2010 Elena-Ramona Modroiu
+ Copyright © 2008-2010 Elena-Ramona Modroiu
__________________________________________________________________
Table of Contents
@@ -34,6 +34,7 @@ Elena-Ramona Modroiu
4.3. long_format (integer)
4.4. prefix (str)
4.5. log_facility (string)
+ 4.6. log_colors (string)
5. Functions
@@ -49,8 +50,9 @@ Elena-Ramona Modroiu
1.3. Set long_format parameter
1.4. Set prefix parameter
1.5. log_facility example
- 1.6. xlog usage
- 1.7. xdbg usage
+ 1.6. log_colors example
+ 1.7. xlog usage
+ 1.8. xdbg usage
Chapter 1. Admin Guide
@@ -70,6 +72,7 @@ Chapter 1. Admin Guide
4.3. long_format (integer)
4.4. prefix (str)
4.5. log_facility (string)
+ 4.6. log_colors (string)
5. Functions
@@ -83,7 +86,7 @@ Chapter 1. Admin Guide
This module provides the possibility to print user formatted log or
debug messages from Kamailio scripts, similar to the printf function. A
C-style printf specifier is replaced with a part of the SIP request or
- other variables from system. Section 2, "Implemented Specifiers" shows
+ other variables from system. Section 2, “Implemented Specifiers” shows
what can be printed out.
2. Implemented Specifiers
@@ -126,6 +129,7 @@ Chapter 1. Admin Guide
4.3. long_format (integer)
4.4. prefix (str)
4.5. log_facility (string)
+ 4.6. log_colors (string)
4.1. buf_size (integer)
@@ -184,6 +188,22 @@ modparam("xlog", "prefix", "-xlog: ")
Example 1.5. log_facility example
modparam("xlog", "log_facility", "LOG_DAEMON")
+4.6. log_colors (string)
+
+ Update terminal colors used by core for log levels (when log_stderr=1
+ and log_color=1). The value has to be 'logname=colors', where colors is
+ two characters specifying foreground and background in the same format
+ as $C(xy) variable.
+
+ The parameter can be set many times, its value can also be a
+ ';'-separated list of color specs.
+
+ Default value is NULL.
+
+ Example 1.6. log_colors example
+modparam("xlog", "log_colors", "L_ERR=cr")
+modparam("xlog", "log_colors", "L_ERR=cr;L_WARN=px")
+
5. Functions
5.1. xlog([ [facility,] level,] format)
@@ -191,7 +211,7 @@ modparam("xlog", "log_facility",
"LOG_DAEMON")
5.3. xlogl([ [facility,] level,] format)
5.4. xdbgl(format)
-5.1. xlog([ [facility,] level,] format)
+5.1. xlog([ [facility,] level,] format)
Print a formated message using LOG function.
@@ -214,13 +234,13 @@ modparam("xlog", "log_facility",
"LOG_DAEMON")
See above options for valid log levels.
If it is not a pseudo-variable, then what really matters is the
third letter of the value. If the log level is higher than the
- "debug" global parameter, the message is not printed to syslog.
+ “debug” global parameter, the message is not printed to syslog.
If this parameter is missing, the implicit log level is 'L_ERR'.
* format - The formatted string to be printed.
This function can be used from ANY_ROUTE.
- Example 1.6. xlog usage
+ Example 1.7. xlog usage
...
xlog("L_ERR", "time [$Tf] method ($rm) r-uri ($ru) 2nd via
($hdr(via[1]))\n");
...
@@ -233,7 +253,7 @@ xlog("LOG_LOCAL3", "L_ERR", "this message
will be sent to syslog facility LOG_LO
CAL3\n");
...
-5.2. xdbg(format)
+5.2. xdbg(format)
Print a formatted message using DBG function.
@@ -242,17 +262,17 @@ CAL3\n");
This function can be used from ANY_ROUTE.
- Example 1.7. xdbg usage
+ Example 1.8. xdbg usage
...
xdbg("time $Cbx[$Tf]$Cxx method ($rm) r-uri ($ru)\n");
...
-5.3. xlogl([ [facility,] level,] format)
+5.3. xlogl([ [facility,] level,] format)
Similar to xlog(), in addition is printing cfg line number at the
beginning of message.
-5.4. xdbgl(format)
+5.4. xdbgl(format)
Similar to xdbg(), in addition is printing cfg line number at the
beginning of message.
diff --git a/modules_k/xlog/doc/xlog_admin.xml b/modules_k/xlog/doc/xlog_admin.xml
index e52a4e1..1eb4d91 100644
--- a/modules_k/xlog/doc/xlog_admin.xml
+++ b/modules_k/xlog/doc/xlog_admin.xml
@@ -188,6 +188,29 @@ modparam("xlog", "log_facility",
"LOG_DAEMON")
</programlisting>
</example>
</section>
+ <section>
+ <title><varname>log_colors</varname> (string)</title>
+ <para>
+ Update terminal colors used by core for log levels (when log_stderr=1
+ and log_color=1). The value has to be 'logname=colors', where colors
+ is two characters specifying foreground and background in the same
+ format as $C(xy) variable.
+ </para>
+ <para>
+ The parameter can be set many times, its value can also be a
+ ';'-separated list of color specs.
+ </para>
+ <para>
+ Default value is NULL.
+ </para>
+ <example>
+ <title>log_colors example</title>
+ <programlisting format="linespecific">
+modparam("xlog", "log_colors", "L_ERR=cr")
+modparam("xlog", "log_colors", "L_ERR=cr;L_WARN=px")
+</programlisting>
+ </example>
+ </section>
</section>
<section>
diff --git a/modules_k/xlog/xlog.c b/modules_k/xlog/xlog.c
index 1d6091b..2ebd4e9 100644
--- a/modules_k/xlog/xlog.c
+++ b/modules_k/xlog/xlog.c
@@ -34,6 +34,7 @@
#include "../../dprint.h"
#include "../../error.h"
#include "../../mem/mem.h"
+#include "../../parser/parse_param.h"
#include "xl_lib.h"
@@ -75,6 +76,8 @@ static int xdbgl_fixup(void** param, int param_no);
static void destroy(void);
+static int xlog_log_colors_param(modparam_t type, void *val);
+
int pv_parse_color_name(pv_spec_p sp, str *in);
static int pv_get_color(struct sip_msg *msg, pv_param_t *param,
pv_value_t *res);
@@ -120,6 +123,7 @@ static param_export_t params[]={
{"long_format", INT_PARAM, &long_format},
{"prefix", STR_PARAM, &_xlog_prefix},
{"log_facility", STR_PARAM, &xlog_facility_name},
+ {"log_colors", STR_PARAM|USE_FUNC_PARAM, (void*)xlog_log_colors_param},
{0,0,0}
};
@@ -713,3 +717,82 @@ error:
return -1;
}
+/**
+ *
+ */
+static int xlog_log_colors_param(modparam_t type, void *val)
+{
+ param_t* params_list = NULL;
+ param_hooks_t phooks;
+ param_t *pit=NULL;
+ str s;
+ int level;
+
+ if(val==NULL)
+ goto error;
+
+ s.s = (char*)val;
+ s.len = strlen(s.s);
+
+ if(s.len<=0)
+ goto error;
+
+ if(s.s[s.len-1]==';')
+ s.len--;
+ if (parse_params(&s, CLASS_ANY, &phooks, ¶ms_list)<0)
+ goto error;
+
+ for (pit = params_list; pit; pit=pit->next)
+ {
+ if (pit->name.len==7
+ && strncasecmp(pit->name.s, "l_alert", 7)==0) {
+ level = L_ALERT;
+ } else if (pit->name.len==5
+ && strncasecmp(pit->name.s, "l_bug", 5)==0) {
+ level = L_BUG;
+ } else if (pit->name.len==7
+ && strncasecmp(pit->name.s, "l_crit2", 7)==0) {
+ level = L_CRIT2;
+ } else if (pit->name.len==6
+ && strncasecmp(pit->name.s, "l_crit", 6)==0) {
+ level = L_CRIT;
+ } else if (pit->name.len==5
+ && strncasecmp(pit->name.s, "l_err", 5)==0) {
+ level = L_ERR;
+ } else if (pit->name.len==6
+ && strncasecmp(pit->name.s, "l_warn", 6)==0) {
+ level = L_WARN;
+ } else if (pit->name.len==8
+ && strncasecmp(pit->name.s, "l_notice", 8)==0) {
+ level = L_NOTICE;
+ } else if (pit->name.len==6
+ && strncasecmp(pit->name.s, "l_info", 6)==0) {
+ level = L_INFO;
+ } else if (pit->name.len==5
+ && strncasecmp(pit->name.s, "l_dbg", 5)==0) {
+ level = L_DBG;
+ } else {
+ LM_ERR("invalid level name %.*s\n",
+ pit->name.len, pit->name.s);
+ goto error;
+ }
+
+ if(pit->body.len!=2) {
+ LM_ERR("invalid color spec for level %.*s (%.*s)\n",
+ pit->name.len, pit->name.s,
+ pit->body.len, pit->body.s);
+ goto error;
+ }
+ dprint_color_update(level, pit->body.s[0], pit->body.s[1]);
+ }
+
+ if(params_list!=NULL)
+ free_params(params_list);
+ return 0;
+
+error:
+ if(params_list!=NULL)
+ free_params(params_list);
+ return -1;
+
+}