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. Android 手机卫士--签名文件说明&包名说明

    在<Android 手机卫士--打包生成apk维护到服务器>一文中,实现了新版本的apk到服务器,当打开客户端apk的时候,发现有新版本,提示更新.还实现了利用xutils工具实现了从服务 ...

  2. 约瑟夫环问题分析-C语言经典面试题

    好久没有看有关算法的问题了,今天废了不少劲,再感叹一句:要想学好算法就要常练习,没什么捷径可走.废话不多说,如下: 问题描述:有m个人,围成一个环,编号为 0.1.2.3...m-1,从第一个人开始循 ...

  3. OC中的内存管理

    一. 基本原理 1. 什么是内存管理 移动设备的内存极其有限,每个app所能占用的内存是有限制的 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间.比如回收一些不需 ...

  4. 【转】C# 中的委托和事件

    阅读目录 C# 中的委托和事件 引言 将方法作为方法的参数 将方法绑定到委托 事件的由来 事件和委托的编译代码 委托.事件与Observer设计模式 .Net Framework中的委托与事件 总结 ...

  5. 用SQL语句建库建表建约束(用SQl语句在指定盘符创建文件夹)

    一 :创建数据库 创建一个数据文件和一个日志文件(MySchool) create database MySchoolon primary      --默认属于primary主文件组,可省略(--数 ...

  6. Innodb行锁源码学习(一)

    Innodb是mysql数据库中目前最流行的存储引擎,innodb相对其它存储引擎一个很大的特点是支持事务,并且支持行粒度的锁.今天我重点跟大家分享下innodb行锁实现的基础知识.由于篇幅比较大,文 ...

  7. java.lang.NoClassDefFoundError:TagSupport

    这个错误应该就是没有成功加载tomcat自带的jar包jsp-api.jar. 在网上看到很多网友说要把tomcat/lib下的jsp-api.jar拷贝到项目/WEB_INF/lib下并导入,本人试 ...

  8. MongoDB学习笔记——Master/Slave主从复制

    Master/Slave主从复制 主从复制MongoDB中比较常用的一种方式,如果要实现主从复制至少应该有两个MongoDB实例,一个作为主节点负责客户端请求,另一个作为从节点负责从主节点映射数据,提 ...

  9. HDFS

    1.HDFS shell 1.0查看帮助 hadoop fs -help <cmd> 1.1上传 hadoop fs -put <linux上文件> <hdfs上的路径& ...

  10. C#正则表达式开源工具,为.net开源绵尽薄力

    先交代一下背景,最近工作中经常用到正则表达式,而正则表达式这个东西我个人觉得很鸡肋,不用吧,有些功能实现起来会很麻烦.用吧,又不是说工作中经常用到,只是有时候有些需要求用到而已.但是正则表达式只要一段 ...