zoukankan      html  css  js  c++  java
  • zlog学习笔记(level)

    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, " %[^= 	] = %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] == ''){
                    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] == ''){
                    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] != ''; i++){
                    a_level->str_uppercase[i] = toupper(str[i]);
                    a_level->str_lowercase[i] = tolower(str[i]);
            }
    
            //notice: overflow
            if(str[i] != ''){
                    zc_error("not enough space for str, str[%s] > %d", str, i);
                    goto err;
            }else{
                    a_level->str_uppercase[i] = '';
                    a_level->str_lowercase[i] = '';
            }
    
            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);
    }
  • 相关阅读:
    SQL Server 重新恢复自动编号列的序号
    AT指令
    wavecom短信猫常用AT命令
    Maven中-DskipTests和-Dmaven.test.skip=true的区别
    mybatis的插件,挺好支持下
    转java不同阶段的学习历程,总结的很不错,收了
    Java for循环和foreach循环的性能比较
    java synchronized 同步详解
    spring 中几种注解的说明
    zookeeper是什么?原理是什么?【转】
  • 原文地址:https://www.cnblogs.com/bai-jimmy/p/5396288.html
Copyright © 2011-2022 走看看