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 + ];
char str_lowercase[MAXLEN_PATH + ];
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

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, -);
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 -;
} /* line: TRACE = 10, LOG_ERR */
zlog_level_t *zlog_level_new(char *line){
zlog_level_t *a_level = NULL;
int i, nscan, l = ;
char str[MAXLEN_CFG_LINE + ];
char sl[MAXLEN_CFG_LINE + ]; 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 < ){
zc_error("level[%s], syntax wrong", line);
return NULL;
} //check level and str
if((l < ) || (l > )){
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(, 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 == -){
zc_error("syslog_level_atoi fail");
goto err;
}
} //strncpy and toupper(str)
for(i = ; (i < sizeof(a_level->str_uppercase) - ) && 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;
}

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)的更多相关文章

  1. zlog学习笔记(level_list)

    level_list.h /** * */ #ifndef __zlog_level_list_h #define __zlog_level_list_h zc_arraylist_t *zlog_l ...

  2. zlog学习笔记(mdc)

    mdc.h #ifndef __zlog_mdc_h #define __zlog_mdc_h #include "zc_defs.h" typedef struct zlog_m ...

  3. zlog学习笔记(zc_hashtable)

    zc_hashtable.h /** * hashtable */ #ifndef __zc_hashtable_h #define __zc_hashtable_h typedef struct z ...

  4. zlog学习笔记(zc_arraylist)

    zc_arraylist.h /** * 实现类似列表的功能 * */ #ifndef __zc_arraylist_h #define __zc_arraylist_h #define ARRAY_ ...

  5. zlog学习笔记(zc_profile)

    zc_profile.h #ifndef __zlog_profile_h #define __zlog_profile_h #define EMPTY() #define zc_assert(exp ...

  6. Linux 学习笔记

    Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...

  7. Android M Permission 运行时权限 学习笔记

    Android M Permission 运行时权限 学习笔记 从Android 6.0开始, 用户需要在运行时请求权限, 本文对运行时权限的申请和处理进行介绍, 并讨论了使用运行时权限时新老版本的一 ...

  8. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  9. 两千行PHP学习笔记

    亲们,如约而至的PHP笔记来啦~绝对干货! 以下为我以前学PHP时做的笔记,时不时的也会添加一些基础知识点进去,有时还翻出来查查. MySQL笔记:一千行MySQL学习笔记http://www.cnb ...

随机推荐

  1. iOS开发工具篇-AppStore统计工具 (转载)

    随着iOS开发的流行,针对iOS开发涉及的方方面面,早有一些公司提供了专门的解决方案或工具.这些解决方案或工具包括:用户行为统计工具(友盟,Flurry,Google Analytics等), App ...

  2. markdown 使用

    一:markdown编辑器下载 小书匠 http://soft.xiaoshujiang.com/ 在线编辑工具,所写即所见 作业部落 https://www.zybuluo.com/mdeditor ...

  3. node.js Tools for Visual Studio 介绍

    node.js Tools for Visual Studio简称NTVS 项目 安装包地址:https://nodejstools.codeplex.com 目前支持2012和2013

  4. Android 手机卫士--home界面布局

    本文实现当从splash界面进入hone界面的时候,产生一种渐进淡入的动画效果,在onCreate中调用一个方法initAnimation(),代码如下: /** * 添加淡入的动画效果 */ pri ...

  5. android post带数据请求方式,传递的数据格式包括json和map

    如下: public static String httpPost(String url, String json) { try { URL u = new URL(url); HttpURLConn ...

  6. 你真的了解UITableViewCell重用吗?

    一:首先查看一下关于UITableViewCell重用的定义 - (nullable __kindof UITableViewCell *)dequeueReusableCellWithIdentif ...

  7. 基于SolrCloud的内容搜索和热点推送

    ➠更多技术干货请戳:听云博客 什么是热点 我认为热点有时效性和受众面 用户关注从低到高再到低的内容 .有公共热点和分类热点.例如医辽养老全民关注,科技汽车等只有特定的人群关注. 推送的条件 搜索频次达 ...

  8. Atitit.android js 的键盘按键检测Back键Home键和Menu键事件

    Atitit.android js 的键盘按键检测Back键Home键和Menu键事件 1. onKeyDown @Override public boolean onKeyDown(int keyC ...

  9. GitHub Desktop 桌面工具,离线版本下载(无需考虑网络问题)

    http://pan.baidu.com/s/1qYq4X0C GitHub Desktop 桌面工具,离线版本下载 对于网络不好,不稳定,安装多次都不成功的,这是你们的最好的安装方法了.

  10. android ProGuard 代码混淆实现

    1 修改project.properties,添加ProGuard配置项 proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt: ...