|
|
|
@ -136,6 +136,7 @@ static const char *color_output_info[] = {
|
|
|
|
#endif /* ELOG_COLOR_ENABLE */
|
|
|
|
#endif /* ELOG_COLOR_ENABLE */
|
|
|
|
|
|
|
|
|
|
|
|
static bool get_fmt_enabled(uint8_t level, size_t set);
|
|
|
|
static bool get_fmt_enabled(uint8_t level, size_t set);
|
|
|
|
|
|
|
|
static void elog_set_filter_tag_lvl_default();
|
|
|
|
|
|
|
|
|
|
|
|
/* EasyLogger assert hook */
|
|
|
|
/* EasyLogger assert hook */
|
|
|
|
void (*elog_assert_hook)(const char* expr, const char* func, size_t line);
|
|
|
|
void (*elog_assert_hook)(const char* expr, const char* func, size_t line);
|
|
|
|
@ -155,6 +156,10 @@ ElogErrCode elog_init(void) {
|
|
|
|
|
|
|
|
|
|
|
|
ElogErrCode result = ELOG_NO_ERR;
|
|
|
|
ElogErrCode result = ELOG_NO_ERR;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (elog.init_ok == true) {
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* port initialize */
|
|
|
|
/* port initialize */
|
|
|
|
result = elog_port_init();
|
|
|
|
result = elog_port_init();
|
|
|
|
if (result != ELOG_NO_ERR) {
|
|
|
|
if (result != ELOG_NO_ERR) {
|
|
|
|
@ -182,6 +187,11 @@ ElogErrCode elog_init(void) {
|
|
|
|
/* set level is ELOG_LVL_VERBOSE */
|
|
|
|
/* set level is ELOG_LVL_VERBOSE */
|
|
|
|
elog_set_filter_lvl(ELOG_LVL_VERBOSE);
|
|
|
|
elog_set_filter_lvl(ELOG_LVL_VERBOSE);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* set tag_level to default val */
|
|
|
|
|
|
|
|
elog_set_filter_tag_lvl_default();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
elog.init_ok = true;
|
|
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -322,6 +332,103 @@ void elog_output_unlock(void) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* set log filter's tag level val to default
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
static void elog_set_filter_tag_lvl_default()
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
uint8_t i = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (i =0; i< ELOG_FILTER_TAG_LVL_MAX_NUM; i++){
|
|
|
|
|
|
|
|
memset(elog.filter.tag_lvl_filter[i].tag, '\0', ELOG_FILTER_TAG_MAX_LEN + 1);
|
|
|
|
|
|
|
|
elog.filter.tag_lvl_filter[i].level = LOG_FILTER_LVL_SILENT;
|
|
|
|
|
|
|
|
elog.filter.tag_lvl_filter[i].tag_use_flag = false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* set log filter's tag level
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* @param tag tag
|
|
|
|
|
|
|
|
* @param level level
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
void elog_set_filter_tag_lvl(const char *tag, uint8_t level)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
ELOG_ASSERT(level <= ELOG_LVL_VERBOSE);
|
|
|
|
|
|
|
|
ELOG_ASSERT(tag != ((void *)0));
|
|
|
|
|
|
|
|
uint8_t i = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!elog.init_ok) {
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
elog_port_output_lock();
|
|
|
|
|
|
|
|
/* find the tag in arr */
|
|
|
|
|
|
|
|
for (i =0; i< ELOG_FILTER_TAG_LVL_MAX_NUM; i++){
|
|
|
|
|
|
|
|
if (elog.filter.tag_lvl_filter[i].tag_use_flag == true &&
|
|
|
|
|
|
|
|
!strncmp(tag, elog.filter.tag_lvl_filter[i].tag,ELOG_FILTER_TAG_MAX_LEN)){
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (i < ELOG_FILTER_TAG_LVL_MAX_NUM){
|
|
|
|
|
|
|
|
/* find OK */
|
|
|
|
|
|
|
|
if (level == LOG_FILTER_LVL_ALL){
|
|
|
|
|
|
|
|
/* remove current tag's level filter when input level is the lowest level */
|
|
|
|
|
|
|
|
elog.filter.tag_lvl_filter[i].tag_use_flag = false;
|
|
|
|
|
|
|
|
memset(elog.filter.tag_lvl_filter[i].tag, '\0', ELOG_FILTER_TAG_MAX_LEN + 1);
|
|
|
|
|
|
|
|
elog.filter.tag_lvl_filter[i].level = LOG_FILTER_LVL_SILENT;
|
|
|
|
|
|
|
|
} else{
|
|
|
|
|
|
|
|
elog.filter.tag_lvl_filter[i].level = level;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else{
|
|
|
|
|
|
|
|
/* only add the new tag's level filer when level is not LOG_FILTER_LVL_ALL */
|
|
|
|
|
|
|
|
if (level != LOG_FILTER_LVL_ALL){
|
|
|
|
|
|
|
|
for (i =0; i< ELOG_FILTER_TAG_LVL_MAX_NUM; i++){
|
|
|
|
|
|
|
|
if (elog.filter.tag_lvl_filter[i].tag_use_flag == false){
|
|
|
|
|
|
|
|
strncpy(elog.filter.tag_lvl_filter[i].tag, tag, ELOG_FILTER_TAG_MAX_LEN);
|
|
|
|
|
|
|
|
elog.filter.tag_lvl_filter[i].level = level;
|
|
|
|
|
|
|
|
elog.filter.tag_lvl_filter[i].tag_use_flag = true;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
elog_output_unlock();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* get the level on tag's level filer
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* @param tag tag
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* @return It will return the lowest level when tag was not found.
|
|
|
|
|
|
|
|
* Other level will return when tag was found.
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
uint8_t elog_get_filter_tag_lvl(const char *tag)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
ELOG_ASSERT(tag != ((void *)0));
|
|
|
|
|
|
|
|
uint8_t i = 0;
|
|
|
|
|
|
|
|
uint8_t level = LOG_FILTER_LVL_ALL;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!elog.init_ok) {
|
|
|
|
|
|
|
|
return level;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
elog_port_output_lock();
|
|
|
|
|
|
|
|
/* find the tag in arr */
|
|
|
|
|
|
|
|
for (i =0; i< ELOG_FILTER_TAG_LVL_MAX_NUM; i++){
|
|
|
|
|
|
|
|
if (elog.filter.tag_lvl_filter[i].tag_use_flag == true &&
|
|
|
|
|
|
|
|
!strncmp(tag, elog.filter.tag_lvl_filter[i].tag,ELOG_FILTER_TAG_MAX_LEN)){
|
|
|
|
|
|
|
|
level = elog.filter.tag_lvl_filter[i].level;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
elog_output_unlock();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return level;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* output RAW format log
|
|
|
|
* output RAW format log
|
|
|
|
*
|
|
|
|
*
|
|
|
|
@ -401,7 +508,7 @@ void elog_output(uint8_t level, const char *tag, const char *file, const char *f
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/* level filter */
|
|
|
|
/* level filter */
|
|
|
|
if (level > elog.filter.level) {
|
|
|
|
if (level > elog.filter.level || level > elog_get_filter_tag_lvl(tag)) {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
} else if (!strstr(tag, elog.filter.tag)) { /* tag filter */
|
|
|
|
} else if (!strstr(tag, elog.filter.tag)) { /* tag filter */
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
|