summaryrefslogtreecommitdiffstats
path: root/src/shared/libosmocore/src/logging.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/libosmocore/src/logging.c')
-rw-r--r--src/shared/libosmocore/src/logging.c81
1 files changed, 66 insertions, 15 deletions
diff --git a/src/shared/libosmocore/src/logging.c b/src/shared/libosmocore/src/logging.c
index 7c508771..1dc30db3 100644
--- a/src/shared/libosmocore/src/logging.c
+++ b/src/shared/libosmocore/src/logging.c
@@ -37,7 +37,7 @@
#include <osmocore/utils.h>
#include <osmocore/logging.h>
-static const struct log_info *log_info;
+const struct log_info *osmo_log_info;
static struct log_context log_context;
static void *tall_log_ctx = NULL;
@@ -58,12 +58,17 @@ int log_parse_level(const char *lvl)
return get_string_value(loglevel_strs, lvl);
}
+const char *log_level_str(unsigned int lvl)
+{
+ return get_value_string(loglevel_strs, lvl);
+}
+
int log_parse_category(const char *category)
{
int i;
- for (i = 0; i < log_info->num_cat; ++i) {
- if (!strcasecmp(log_info->cat[i].name+1, category))
+ for (i = 0; i < osmo_log_info->num_cat; ++i) {
+ if (!strcasecmp(osmo_log_info->cat[i].name+1, category))
return i;
}
@@ -87,15 +92,15 @@ void log_parse_category_mask(struct log_target* target, const char *_mask)
category_token = strtok(mask, ":");
do {
- for (i = 0; i < log_info->num_cat; ++i) {
+ for (i = 0; i < osmo_log_info->num_cat; ++i) {
char* colon = strstr(category_token, ",");
int length = strlen(category_token);
if (colon)
length = colon - category_token;
- if (strncasecmp(log_info->cat[i].name, category_token,
- length) == 0) {
+ if (strncasecmp(osmo_log_info->cat[i].name,
+ category_token, length) == 0) {
int level = 0;
if (colon)
@@ -112,8 +117,8 @@ void log_parse_category_mask(struct log_target* target, const char *_mask)
static const char* color(int subsys)
{
- if (subsys < log_info->num_cat)
- return log_info->cat[subsys].color;
+ if (subsys < osmo_log_info->num_cat)
+ return osmo_log_info->cat[subsys].color;
return NULL;
}
@@ -193,8 +198,8 @@ static void _logp(unsigned int subsys, int level, char *file, int line,
* say stop, continue, output */
if ((tar->filter_map & LOG_FILTER_ALL) != 0)
output = 1;
- else if (log_info->filter_fn)
- output = log_info->filter_fn(&log_context,
+ else if (osmo_log_info->filter_fn)
+ output = osmo_log_info->filter_fn(&log_context,
tar);
if (output) {
@@ -301,7 +306,7 @@ void log_set_log_level(struct log_target *target, int log_level)
void log_set_category_filter(struct log_target *target, int category,
int enable, int level)
{
- if (category >= log_info->num_cat)
+ if (category >= osmo_log_info->num_cat)
return;
target->categories[category].enabled = !!enable;
target->categories[category].loglevel = level;
@@ -328,10 +333,10 @@ struct log_target *log_target_create(void)
INIT_LLIST_HEAD(&target->entry);
/* initialize the per-category enabled/loglevel from defaults */
- for (i = 0; i < log_info->num_cat; i++) {
+ for (i = 0; i < osmo_log_info->num_cat; i++) {
struct log_category *cat = &target->categories[i];
- cat->enabled = log_info->cat[i].enabled;
- cat->loglevel = log_info->cat[i].loglevel;
+ cat->enabled = osmo_log_info->cat[i].enabled;
+ cat->loglevel = osmo_log_info->cat[i].loglevel;
}
/* global settings */
@@ -361,8 +366,54 @@ struct log_target *log_target_create_stderr(void)
#endif /* stderr */
}
+const char *log_vty_level_string(struct log_info *info)
+{
+ const struct value_string *vs;
+ unsigned int len = 3; /* ()\0 */
+ char *str;
+
+ for (vs = loglevel_strs; vs->value || vs->str; vs++)
+ len += strlen(vs->str) + 1;
+
+ str = talloc_zero_size(NULL, len);
+ if (!str)
+ return NULL;
+
+ str[0] = '(';
+ for (vs = loglevel_strs; vs->value || vs->str; vs++) {
+ strcat(str, vs->str);
+ strcat(str, "|");
+ }
+ str[strlen(str)-1] = ')';
+
+ return str;
+}
+
+const char *log_vty_category_string(struct log_info *info)
+{
+ unsigned int len = 3; /* "()\0" */
+ unsigned int i;
+ char *str;
+
+ for (i = 0; i < info->num_cat; i++)
+ len += strlen(info->cat[i].name) + 1;
+
+ str = talloc_zero_size(NULL, len);
+ if (!str)
+ return NULL;
+
+ str[0] = '(';
+ for (i = 0; i < info->num_cat; i++) {
+ strcat(str, info->cat[i].name+1);
+ strcat(str, "|");
+ }
+ str[strlen(str)-1] = ')';
+
+ return str;
+}
+
void log_init(const struct log_info *cat)
{
tall_log_ctx = talloc_named_const(NULL, 1, "logging");
- log_info = cat;
+ osmo_log_info = cat;
}