Module: sip-router Branch: master Commit: a5a58239efb00f25cd51753c984ee4469fd97754 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=a5a58239...
Author: Elena-Ramona Modroiu ramona@asipto.com Committer: Elena-Ramona Modroiu ramona@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
- 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; + +}