mirror of https://gerrit.osmocom.org/libosmocore
rename 'debug' interface to 'logging' interface
It's not really about debugging, but about generic logging...
This commit is contained in:
parent
faadfe2b93
commit
3ae2758fba
|
@ -1,7 +1,7 @@
|
||||||
osmocore_HEADERS = signal.h linuxlist.h timer.h select.h msgb.h \
|
osmocore_HEADERS = signal.h linuxlist.h timer.h select.h msgb.h \
|
||||||
tlv.h bitvec.h comp128.h statistics.h gsm_utils.h utils.h \
|
tlv.h bitvec.h comp128.h statistics.h gsm_utils.h utils.h \
|
||||||
gsmtap.h write_queue.h rsl.h gsm48.h rxlev_stat.h mncc.h \
|
gsmtap.h write_queue.h rsl.h gsm48.h rxlev_stat.h mncc.h \
|
||||||
gsm48_ie.h debug.h
|
gsm48_ie.h logging.h
|
||||||
|
|
||||||
if ENABLE_TALLOC
|
if ENABLE_TALLOC
|
||||||
osmocore_HEADERS += talloc.h
|
osmocore_HEADERS += talloc.h
|
||||||
|
|
|
@ -1,130 +0,0 @@
|
||||||
#ifndef _OSMOCORE_DEBUG_H
|
|
||||||
#define _OSMOCORE_DEBUG_H
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <osmocore/linuxlist.h>
|
|
||||||
|
|
||||||
#define DEBUG_MAX_CATEGORY 32
|
|
||||||
#define DEBUG_MAX_CTX 8
|
|
||||||
#define DEBUG_MAX_FILTERS 8
|
|
||||||
|
|
||||||
#define DEBUG
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
#define DEBUGP(ss, fmt, args...) debugp(ss, __FILE__, __LINE__, 0, fmt, ## args)
|
|
||||||
#define DEBUGPC(ss, fmt, args...) debugp(ss, __FILE__, __LINE__, 1, fmt, ## args)
|
|
||||||
#else
|
|
||||||
#define DEBUGP(xss, fmt, args...)
|
|
||||||
#define DEBUGPC(ss, fmt, args...)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define static_assert(exp, name) typedef int dummy##name [(exp) ? 1 : -1];
|
|
||||||
|
|
||||||
char *hexdump(const unsigned char *buf, int len);
|
|
||||||
void debugp(unsigned int subsys, char *file, int line, int cont, const char *format, ...) __attribute__ ((format (printf, 5, 6)));
|
|
||||||
|
|
||||||
/* new logging interface */
|
|
||||||
#define LOGP(ss, level, fmt, args...) \
|
|
||||||
debugp2(ss, level, __FILE__, __LINE__, 0, fmt, ##args)
|
|
||||||
#define LOGPC(ss, level, fmt, args...) \
|
|
||||||
debugp2(ss, level, __FILE__, __LINE__, 1, fmt, ##args)
|
|
||||||
|
|
||||||
/* different levels */
|
|
||||||
#define LOGL_DEBUG 1 /* debugging information */
|
|
||||||
#define LOGL_INFO 3
|
|
||||||
#define LOGL_NOTICE 5 /* abnormal/unexpected condition */
|
|
||||||
#define LOGL_ERROR 7 /* error condition, requires user action */
|
|
||||||
#define LOGL_FATAL 8 /* fatal, program aborted */
|
|
||||||
|
|
||||||
#define DEBUG_FILTER_ALL 0x0001
|
|
||||||
|
|
||||||
struct debug_category {
|
|
||||||
uint8_t loglevel;
|
|
||||||
uint8_t enabled;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct debug_info_cat {
|
|
||||||
const char *name;
|
|
||||||
const char *color;
|
|
||||||
const char *description;
|
|
||||||
uint8_t loglevel;
|
|
||||||
uint8_t enabled;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* debug context information, passed to filter */
|
|
||||||
struct debug_context {
|
|
||||||
void *ctx[DEBUG_MAX_CTX+1];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct debug_target;
|
|
||||||
|
|
||||||
typedef int debug_filter(const struct debug_context *ctx,
|
|
||||||
struct debug_target *target);
|
|
||||||
|
|
||||||
struct debug_info {
|
|
||||||
/* filter callback function */
|
|
||||||
debug_filter *filter_fn;
|
|
||||||
|
|
||||||
/* per-category information */
|
|
||||||
const struct debug_info_cat *cat;
|
|
||||||
unsigned int num_cat;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct debug_target {
|
|
||||||
struct llist_head entry;
|
|
||||||
|
|
||||||
int filter_map;
|
|
||||||
void *filter_data[DEBUG_MAX_FILTERS+1];
|
|
||||||
|
|
||||||
struct debug_category categories[DEBUG_MAX_CATEGORY+1];
|
|
||||||
uint8_t loglevel;
|
|
||||||
int use_color:1;
|
|
||||||
int print_timestamp:1;
|
|
||||||
|
|
||||||
union {
|
|
||||||
struct {
|
|
||||||
FILE *out;
|
|
||||||
} tgt_stdout;
|
|
||||||
|
|
||||||
struct {
|
|
||||||
int priority;
|
|
||||||
} tgt_syslog;
|
|
||||||
|
|
||||||
struct {
|
|
||||||
void *vty;
|
|
||||||
} tgt_vty;
|
|
||||||
};
|
|
||||||
|
|
||||||
void (*output) (struct debug_target *target, const char *string);
|
|
||||||
};
|
|
||||||
|
|
||||||
/* use the above macros */
|
|
||||||
void debugp2(unsigned int subsys, unsigned int level, char *file,
|
|
||||||
int line, int cont, const char *format, ...)
|
|
||||||
__attribute__ ((format (printf, 6, 7)));
|
|
||||||
void debug_init(const struct debug_info *cat);
|
|
||||||
|
|
||||||
/* context management */
|
|
||||||
void debug_reset_context(void);
|
|
||||||
int debug_set_context(uint8_t ctx, void *value);
|
|
||||||
|
|
||||||
/* filter on the targets */
|
|
||||||
void debug_set_all_filter(struct debug_target *target, int);
|
|
||||||
|
|
||||||
void debug_set_use_color(struct debug_target *target, int);
|
|
||||||
void debug_set_print_timestamp(struct debug_target *target, int);
|
|
||||||
void debug_set_log_level(struct debug_target *target, int log_level);
|
|
||||||
void debug_parse_category_mask(struct debug_target *target, const char* mask);
|
|
||||||
int debug_parse_level(const char *lvl);
|
|
||||||
int debug_parse_category(const char *category);
|
|
||||||
void debug_set_category_filter(struct debug_target *target, int category,
|
|
||||||
int enable, int level);
|
|
||||||
|
|
||||||
/* management of the targets */
|
|
||||||
struct debug_target *debug_target_create(void);
|
|
||||||
struct debug_target *debug_target_create_stderr(void);
|
|
||||||
void debug_add_target(struct debug_target *target);
|
|
||||||
void debug_del_target(struct debug_target *target);
|
|
||||||
|
|
||||||
#endif /* _OSMOCORE_DEBUG_H */
|
|
|
@ -0,0 +1,130 @@
|
||||||
|
#ifndef _OSMOCORE_LOGGING_H
|
||||||
|
#define _OSMOCORE_LOGGING_H
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <osmocore/linuxlist.h>
|
||||||
|
|
||||||
|
#define LOG_MAX_CATEGORY 32
|
||||||
|
#define LOG_MAX_CTX 8
|
||||||
|
#define LOG_MAX_FILTERS 8
|
||||||
|
|
||||||
|
#define DEBUG
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
#define DEBUGP(ss, fmt, args...) logp(ss, __FILE__, __LINE__, 0, fmt, ## args)
|
||||||
|
#define DEBUGPC(ss, fmt, args...) logp(ss, __FILE__, __LINE__, 1, fmt, ## args)
|
||||||
|
#else
|
||||||
|
#define DEBUGP(xss, fmt, args...)
|
||||||
|
#define DEBUGPC(ss, fmt, args...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define static_assert(exp, name) typedef int dummy##name [(exp) ? 1 : -1];
|
||||||
|
|
||||||
|
char *hexdump(const unsigned char *buf, int len);
|
||||||
|
void logp(unsigned int subsys, char *file, int line, int cont, const char *format, ...) __attribute__ ((format (printf, 5, 6)));
|
||||||
|
|
||||||
|
/* new logging interface */
|
||||||
|
#define LOGP(ss, level, fmt, args...) \
|
||||||
|
logp2(ss, level, __FILE__, __LINE__, 0, fmt, ##args)
|
||||||
|
#define LOGPC(ss, level, fmt, args...) \
|
||||||
|
logp2(ss, level, __FILE__, __LINE__, 1, fmt, ##args)
|
||||||
|
|
||||||
|
/* different levels */
|
||||||
|
#define LOGL_DEBUG 1 /* debugging information */
|
||||||
|
#define LOGL_INFO 3
|
||||||
|
#define LOGL_NOTICE 5 /* abnormal/unexpected condition */
|
||||||
|
#define LOGL_ERROR 7 /* error condition, requires user action */
|
||||||
|
#define LOGL_FATAL 8 /* fatal, program aborted */
|
||||||
|
|
||||||
|
#define LOG_FILTER_ALL 0x0001
|
||||||
|
|
||||||
|
struct log_category {
|
||||||
|
uint8_t loglevel;
|
||||||
|
uint8_t enabled;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct log_info_cat {
|
||||||
|
const char *name;
|
||||||
|
const char *color;
|
||||||
|
const char *description;
|
||||||
|
uint8_t loglevel;
|
||||||
|
uint8_t enabled;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* log context information, passed to filter */
|
||||||
|
struct log_context {
|
||||||
|
void *ctx[LOG_MAX_CTX+1];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct log_target;
|
||||||
|
|
||||||
|
typedef int log_filter(const struct log_context *ctx,
|
||||||
|
struct log_target *target);
|
||||||
|
|
||||||
|
struct log_info {
|
||||||
|
/* filter callback function */
|
||||||
|
log_filter *filter_fn;
|
||||||
|
|
||||||
|
/* per-category information */
|
||||||
|
const struct log_info_cat *cat;
|
||||||
|
unsigned int num_cat;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct log_target {
|
||||||
|
struct llist_head entry;
|
||||||
|
|
||||||
|
int filter_map;
|
||||||
|
void *filter_data[LOG_MAX_FILTERS+1];
|
||||||
|
|
||||||
|
struct log_category categories[LOG_MAX_CATEGORY+1];
|
||||||
|
uint8_t loglevel;
|
||||||
|
int use_color:1;
|
||||||
|
int print_timestamp:1;
|
||||||
|
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
FILE *out;
|
||||||
|
} tgt_stdout;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
int priority;
|
||||||
|
} tgt_syslog;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
void *vty;
|
||||||
|
} tgt_vty;
|
||||||
|
};
|
||||||
|
|
||||||
|
void (*output) (struct log_target *target, const char *string);
|
||||||
|
};
|
||||||
|
|
||||||
|
/* use the above macros */
|
||||||
|
void logp2(unsigned int subsys, unsigned int level, char *file,
|
||||||
|
int line, int cont, const char *format, ...)
|
||||||
|
__attribute__ ((format (printf, 6, 7)));
|
||||||
|
void log_init(const struct log_info *cat);
|
||||||
|
|
||||||
|
/* context management */
|
||||||
|
void log_reset_context(void);
|
||||||
|
int log_set_context(uint8_t ctx, void *value);
|
||||||
|
|
||||||
|
/* filter on the targets */
|
||||||
|
void log_set_all_filter(struct log_target *target, int);
|
||||||
|
|
||||||
|
void log_set_use_color(struct log_target *target, int);
|
||||||
|
void log_set_print_timestamp(struct log_target *target, int);
|
||||||
|
void log_set_log_level(struct log_target *target, int log_level);
|
||||||
|
void log_parse_category_mask(struct log_target *target, const char* mask);
|
||||||
|
int log_parse_level(const char *lvl);
|
||||||
|
int log_parse_category(const char *category);
|
||||||
|
void log_set_category_filter(struct log_target *target, int category,
|
||||||
|
int enable, int level);
|
||||||
|
|
||||||
|
/* management of the targets */
|
||||||
|
struct log_target *log_target_create(void);
|
||||||
|
struct log_target *log_target_create_stderr(void);
|
||||||
|
void log_add_target(struct log_target *target);
|
||||||
|
void log_del_target(struct log_target *target);
|
||||||
|
|
||||||
|
#endif /* _OSMOCORE_LOGGING_H */
|
|
@ -10,7 +10,7 @@ lib_LTLIBRARIES = libosmocore.la
|
||||||
libosmocore_la_SOURCES = timer.c select.c signal.c msgb.c rxlev_stat.c \
|
libosmocore_la_SOURCES = timer.c select.c signal.c msgb.c rxlev_stat.c \
|
||||||
tlv_parser.c bitvec.c comp128.c gsm_utils.c statistics.c \
|
tlv_parser.c bitvec.c comp128.c gsm_utils.c statistics.c \
|
||||||
write_queue.c utils.c rsl.c gsm48.c gsm48_ie.c \
|
write_queue.c utils.c rsl.c gsm48.c gsm48_ie.c \
|
||||||
debug.c
|
logging.c
|
||||||
|
|
||||||
if ENABLE_TALLOC
|
if ENABLE_TALLOC
|
||||||
libosmocore_la_SOURCES += talloc.c
|
libosmocore_la_SOURCES += talloc.c
|
||||||
|
|
|
@ -30,12 +30,12 @@
|
||||||
|
|
||||||
#include <osmocore/talloc.h>
|
#include <osmocore/talloc.h>
|
||||||
#include <osmocore/utils.h>
|
#include <osmocore/utils.h>
|
||||||
#include <osmocore/debug.h>
|
#include <osmocore/logging.h>
|
||||||
|
|
||||||
static const struct debug_info *debug_info;
|
static const struct log_info *log_info;
|
||||||
|
|
||||||
static struct debug_context debug_context;
|
static struct log_context log_context;
|
||||||
static void *tall_dbg_ctx = NULL;
|
static void *tall_log_ctx = NULL;
|
||||||
static LLIST_HEAD(target_list);
|
static LLIST_HEAD(target_list);
|
||||||
|
|
||||||
static const struct value_string loglevel_strs[] = {
|
static const struct value_string loglevel_strs[] = {
|
||||||
|
@ -48,17 +48,17 @@ static const struct value_string loglevel_strs[] = {
|
||||||
{ 0, NULL },
|
{ 0, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
int debug_parse_level(const char *lvl)
|
int log_parse_level(const char *lvl)
|
||||||
{
|
{
|
||||||
return get_string_value(loglevel_strs, lvl);
|
return get_string_value(loglevel_strs, lvl);
|
||||||
}
|
}
|
||||||
|
|
||||||
int debug_parse_category(const char *category)
|
int log_parse_category(const char *category)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < debug_info->num_cat; ++i) {
|
for (i = 0; i < log_info->num_cat; ++i) {
|
||||||
if (!strcasecmp(debug_info->cat[i].name+1, category))
|
if (!strcasecmp(log_info->cat[i].name+1, category))
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ int debug_parse_category(const char *category)
|
||||||
* The format can be this: category1:category2:category3
|
* The format can be this: category1:category2:category3
|
||||||
* or category1,2:category2,3:...
|
* or category1,2:category2,3:...
|
||||||
*/
|
*/
|
||||||
void debug_parse_category_mask(struct debug_target* target, const char *_mask)
|
void log_parse_category_mask(struct log_target* target, const char *_mask)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
char *mask = strdup(_mask);
|
char *mask = strdup(_mask);
|
||||||
|
@ -82,14 +82,14 @@ void debug_parse_category_mask(struct debug_target* target, const char *_mask)
|
||||||
|
|
||||||
category_token = strtok(mask, ":");
|
category_token = strtok(mask, ":");
|
||||||
do {
|
do {
|
||||||
for (i = 0; i < debug_info->num_cat; ++i) {
|
for (i = 0; i < log_info->num_cat; ++i) {
|
||||||
char* colon = strstr(category_token, ",");
|
char* colon = strstr(category_token, ",");
|
||||||
int length = strlen(category_token);
|
int length = strlen(category_token);
|
||||||
|
|
||||||
if (colon)
|
if (colon)
|
||||||
length = colon - category_token;
|
length = colon - category_token;
|
||||||
|
|
||||||
if (strncasecmp(debug_info->cat[i].name, category_token,
|
if (strncasecmp(log_info->cat[i].name, category_token,
|
||||||
length) == 0) {
|
length) == 0) {
|
||||||
int level = 0;
|
int level = 0;
|
||||||
|
|
||||||
|
@ -107,13 +107,13 @@ void debug_parse_category_mask(struct debug_target* target, const char *_mask)
|
||||||
|
|
||||||
static const char* color(int subsys)
|
static const char* color(int subsys)
|
||||||
{
|
{
|
||||||
if (subsys < debug_info->num_cat)
|
if (subsys < log_info->num_cat)
|
||||||
return debug_info->cat[subsys].color;
|
return log_info->cat[subsys].color;
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _output(struct debug_target *target, unsigned int subsys,
|
static void _output(struct log_target *target, unsigned int subsys,
|
||||||
char *file, int line, int cont, const char *format,
|
char *file, int line, int cont, const char *format,
|
||||||
va_list ap)
|
va_list ap)
|
||||||
{
|
{
|
||||||
|
@ -160,17 +160,17 @@ static void _output(struct debug_target *target, unsigned int subsys,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void _debugp(unsigned int subsys, int level, char *file, int line,
|
static void _logp(unsigned int subsys, int level, char *file, int line,
|
||||||
int cont, const char *format, va_list ap)
|
int cont, const char *format, va_list ap)
|
||||||
{
|
{
|
||||||
struct debug_target *tar;
|
struct log_target *tar;
|
||||||
|
|
||||||
llist_for_each_entry(tar, &target_list, entry) {
|
llist_for_each_entry(tar, &target_list, entry) {
|
||||||
struct debug_category *category;
|
struct log_category *category;
|
||||||
int output = 0;
|
int output = 0;
|
||||||
|
|
||||||
category = &tar->categories[subsys];
|
category = &tar->categories[subsys];
|
||||||
/* subsystem is not supposed to be debugged */
|
/* subsystem is not supposed to be logged */
|
||||||
if (!category->enabled)
|
if (!category->enabled)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -186,10 +186,10 @@ static void _debugp(unsigned int subsys, int level, char *file, int line,
|
||||||
/* Apply filters here... if that becomes messy we will
|
/* Apply filters here... if that becomes messy we will
|
||||||
* need to put filters in a list and each filter will
|
* need to put filters in a list and each filter will
|
||||||
* say stop, continue, output */
|
* say stop, continue, output */
|
||||||
if ((tar->filter_map & DEBUG_FILTER_ALL) != 0)
|
if ((tar->filter_map & LOG_FILTER_ALL) != 0)
|
||||||
output = 1;
|
output = 1;
|
||||||
else if (debug_info->filter_fn)
|
else if (log_info->filter_fn)
|
||||||
output = debug_info->filter_fn(&debug_context,
|
output = log_info->filter_fn(&log_context,
|
||||||
tar);
|
tar);
|
||||||
|
|
||||||
if (output) {
|
if (output) {
|
||||||
|
@ -207,22 +207,22 @@ static void _debugp(unsigned int subsys, int level, char *file, int line,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void debugp(unsigned int subsys, char *file, int line, int cont,
|
void logp(unsigned int subsys, char *file, int line, int cont,
|
||||||
const char *format, ...)
|
const char *format, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
va_start(ap, format);
|
va_start(ap, format);
|
||||||
_debugp(subsys, LOGL_DEBUG, file, line, cont, format, ap);
|
_logp(subsys, LOGL_DEBUG, file, line, cont, format, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
void debugp2(unsigned int subsys, unsigned int level, char *file, int line, int cont, const char *format, ...)
|
void logp2(unsigned int subsys, unsigned int level, char *file, int line, int cont, const char *format, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
va_start(ap, format);
|
va_start(ap, format);
|
||||||
_debugp(subsys, level, file, line, cont, format, ap);
|
_logp(subsys, level, file, line, cont, format, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -245,91 +245,91 @@ char *hexdump(const unsigned char *buf, int len)
|
||||||
return hexd_buff;
|
return hexd_buff;
|
||||||
}
|
}
|
||||||
|
|
||||||
void debug_add_target(struct debug_target *target)
|
void log_add_target(struct log_target *target)
|
||||||
{
|
{
|
||||||
llist_add_tail(&target->entry, &target_list);
|
llist_add_tail(&target->entry, &target_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
void debug_del_target(struct debug_target *target)
|
void log_del_target(struct log_target *target)
|
||||||
{
|
{
|
||||||
llist_del(&target->entry);
|
llist_del(&target->entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
void debug_reset_context(void)
|
void log_reset_context(void)
|
||||||
{
|
{
|
||||||
memset(&debug_context, 0, sizeof(debug_context));
|
memset(&log_context, 0, sizeof(log_context));
|
||||||
}
|
}
|
||||||
|
|
||||||
int debug_set_context(uint8_t ctx_nr, void *value)
|
int log_set_context(uint8_t ctx_nr, void *value)
|
||||||
{
|
{
|
||||||
if (ctx_nr > DEBUG_MAX_CTX)
|
if (ctx_nr > LOG_MAX_CTX)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
debug_context.ctx[ctx_nr] = value;
|
log_context.ctx[ctx_nr] = value;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void debug_set_all_filter(struct debug_target *target, int all)
|
void log_set_all_filter(struct log_target *target, int all)
|
||||||
{
|
{
|
||||||
if (all)
|
if (all)
|
||||||
target->filter_map |= DEBUG_FILTER_ALL;
|
target->filter_map |= LOG_FILTER_ALL;
|
||||||
else
|
else
|
||||||
target->filter_map &= ~DEBUG_FILTER_ALL;
|
target->filter_map &= ~LOG_FILTER_ALL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void debug_set_use_color(struct debug_target *target, int use_color)
|
void log_set_use_color(struct log_target *target, int use_color)
|
||||||
{
|
{
|
||||||
target->use_color = use_color;
|
target->use_color = use_color;
|
||||||
}
|
}
|
||||||
|
|
||||||
void debug_set_print_timestamp(struct debug_target *target, int print_timestamp)
|
void log_set_print_timestamp(struct log_target *target, int print_timestamp)
|
||||||
{
|
{
|
||||||
target->print_timestamp = print_timestamp;
|
target->print_timestamp = print_timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
void debug_set_log_level(struct debug_target *target, int log_level)
|
void log_set_log_level(struct log_target *target, int log_level)
|
||||||
{
|
{
|
||||||
target->loglevel = log_level;
|
target->loglevel = log_level;
|
||||||
}
|
}
|
||||||
|
|
||||||
void debug_set_category_filter(struct debug_target *target, int category,
|
void log_set_category_filter(struct log_target *target, int category,
|
||||||
int enable, int level)
|
int enable, int level)
|
||||||
{
|
{
|
||||||
if (category >= debug_info->num_cat)
|
if (category >= log_info->num_cat)
|
||||||
return;
|
return;
|
||||||
target->categories[category].enabled = !!enable;
|
target->categories[category].enabled = !!enable;
|
||||||
target->categories[category].loglevel = level;
|
target->categories[category].loglevel = level;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _stderr_output(struct debug_target *target, const char *log)
|
static void _stderr_output(struct log_target *target, const char *log)
|
||||||
{
|
{
|
||||||
fprintf(target->tgt_stdout.out, "%s", log);
|
fprintf(target->tgt_stdout.out, "%s", log);
|
||||||
fflush(target->tgt_stdout.out);
|
fflush(target->tgt_stdout.out);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct debug_target *debug_target_create(void)
|
struct log_target *log_target_create(void)
|
||||||
{
|
{
|
||||||
struct debug_target *target;
|
struct log_target *target;
|
||||||
|
|
||||||
target = talloc_zero(tall_dbg_ctx, struct debug_target);
|
target = talloc_zero(tall_log_ctx, struct log_target);
|
||||||
if (!target)
|
if (!target)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
INIT_LLIST_HEAD(&target->entry);
|
INIT_LLIST_HEAD(&target->entry);
|
||||||
memcpy(target->categories, debug_info->cat,
|
memcpy(target->categories, log_info->cat,
|
||||||
sizeof(struct debug_category)*debug_info->num_cat);
|
sizeof(struct log_category)*log_info->num_cat);
|
||||||
target->use_color = 1;
|
target->use_color = 1;
|
||||||
target->print_timestamp = 0;
|
target->print_timestamp = 0;
|
||||||
target->loglevel = 0;
|
target->loglevel = 0;
|
||||||
return target;
|
return target;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct debug_target *debug_target_create_stderr(void)
|
struct log_target *log_target_create_stderr(void)
|
||||||
{
|
{
|
||||||
struct debug_target *target;
|
struct log_target *target;
|
||||||
|
|
||||||
target = debug_target_create();
|
target = log_target_create();
|
||||||
if (!target)
|
if (!target)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
@ -338,8 +338,8 @@ struct debug_target *debug_target_create_stderr(void)
|
||||||
return target;
|
return target;
|
||||||
}
|
}
|
||||||
|
|
||||||
void debug_init(const struct debug_info *cat)
|
void log_init(const struct log_info *cat)
|
||||||
{
|
{
|
||||||
tall_dbg_ctx = talloc_named_const(NULL, 1, "debug");
|
tall_log_ctx = talloc_named_const(NULL, 1, "logging");
|
||||||
debug_info = cat;
|
log_info = cat;
|
||||||
}
|
}
|
Loading…
Reference in New Issue