码迷,mamicode.com
首页 > 其他好文 > 详细

zlog学习笔记(level)

时间:2016-04-15 18:06:47      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:

level.h

技术分享
/**
 *
 */

#ifndef __zlog_level_h
#define __zlog_level_h

#include "stdio.h"
#include "zc_defs.h"

typedef struct zlog_level_s {
        int int_level;
        char str_uppercase[MAXLEN_PATH + 1];
        char str_lowercase[MAXLEN_PATH + 1];
        size_t str_len;
        int syslog_level;
} zlog_level_t;

zlog_level_t *zlog_level_new(char *line);
void zlog_level_del(zlog_level_t *a_level);
void zlog_level_profile(zlog_level_t *a_level, int flag);

#endif
View Code

 

level.c

技术分享
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <syslog.h>

#include "zc_defs.h"
#include "level.h"

void zlog_level_profile(zlog_level_t *a_level, int flag){
        zc_assert(a_level,);
        zc_profile(flag, "---level[%p][%d,%s,%s,%d,%d]---",
                a_level,
                a_level->int_level,
                a_level->str_uppercase,
                a_level->str_lowercase,
                (int) a_level->str_len,
                a_level->syslog_level);
        return;
}

void zlog_level_del(zlog_level_t *a_level){
        zc_assert(a_level,);
        free(a_level);
        zc_debug("zlog_level_del[%p]", a_level);
        return;
}

static int syslog_level_atoi(char *str){
        //notice -187
        zc_assert(str, -187);
        if(STRICMP(str, ==, "LOG_EMERG")){
                return LOG_EMERG;
        }
        if(STRICMP(str, ==, "LOG_ALERT")){
                return LOG_ALERT;
        }
        if(STRICMP(str, ==, "LOG_CRIT")){
                return LOG_CRIT;
        }
        if(STRICMP(str, ==, "LOG_ERR")){
                return LOG_ERR;
        }
        if(STRICMP(str, ==, "LOG_WARNING")){
                return LOG_WARNING;
        }
        if(STRICMP(str, ==, "LOG_NOTICE")){
                return LOG_NOTICE;
        }
        if(STRICMP(str, ==, "LOG_INFO")){
                return LOG_INFO;
        }
        if(STRICMP(str, ==, "LOG_DEBUG")){
                return LOG_DEBUG;
        }
        zc_error("wrong syslog level[%s]", str);
        return -187;
}

/* line: TRACE = 10, LOG_ERR */
zlog_level_t *zlog_level_new(char *line){
        zlog_level_t *a_level = NULL;
        int i, nscan, l = 0;
        char str[MAXLEN_CFG_LINE + 1];
        char sl[MAXLEN_CFG_LINE + 1];

        zc_assert(line, NULL);

        memset(str, 0x00, sizeof(str));
        memset(sl, 0x00, sizeof(str));

        nscan = sscanf(line, " %[^= \t] = %d ,%s", str, &l, sl);
        if(nscan < 2){
                zc_error("level[%s], syntax wrong", line);
                return NULL;
        }

        //check level and str
        if((l < 0) || (l > 255)){
                zc_error("l[%d] not in [0, 255], wrong", l);
                return NULL;
        }
        if(str[0] == \0){
                zc_error("str[0] == 0");
                return NULL;
        }

        a_level = calloc(1, sizeof(zlog_level_t));
        if(!a_level){
                zc_error("calloc fail, errno[%d]", errno);
                return NULL;
        }
        a_level->int_level = l;

        //fill syslog level
        if(sl[0] == \0){
                a_level->syslog_level = LOG_DEBUG;
        }else{
                a_level->syslog_level = syslog_level_atoi(sl);
                if(a_level->syslog_level == -187){
                        zc_error("syslog_level_atoi fail");
                        goto err;
                }
        }

        //strncpy and toupper(str)
        for(i = 0; (i < sizeof(a_level->str_uppercase) - 1) && str[i] != \0; i++){
                a_level->str_uppercase[i] = toupper(str[i]);
                a_level->str_lowercase[i] = tolower(str[i]);
        }

        //notice: overflow
        if(str[i] != \0){
                zc_error("not enough space for str, str[%s] > %d", str, i);
                goto err;
        }else{
                a_level->str_uppercase[i] = \0;
                a_level->str_lowercase[i] = \0;
        }

        a_level->str_len = i;

        return a_level;
err:
        zc_error("line[%s]", line);
        zlog_level_del(a_level);
        return NULL;
}
View Code

 

test_level.c

#include "zc_defs.h"
#include "level.h"

#include "zc_profile.c"
#include "level.c"

int main(){
        zlog_level_t *a_level = zlog_level_new("TRACE = 10, LOG_ERR");

        zlog_level_profile(a_level, ZC_DEBUG);

        zlog_level_del(a_level);
}

 

zlog学习笔记(level)

标签:

原文地址:http://www.cnblogs.com/bai-jimmy/p/5396288.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!