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 Frameworks层介绍

    Activity Manager用来管理应用程序生命周期并提供常用的导航回退功能. Window Manager提供一些我们访问手机屏幕的方法.屏幕的透明度.亮度.背景. Content Provid ...

  2. 【代码笔记】iOS-等待动画

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...

  3. android support的作用及其常见错误的解决

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  4. iOS 申请测试用的远程推送证书

    进入member center创建一个App ID 注意下面证书名字的变化 将刚刚生成的两个证书下载下来,双击安装 安装完成后可以在钥匙串中查看 这样远程推送证书的申请流程就走完了

  5. 百度编辑器ueditor 异步加载时,初始化没办法赋值bug解决方法

    百度编辑器ueditor 异步加载时,初始化没办法赋值bug解决方法 金刚 前端 ueditor 初始化 因项目中使用了百度编辑器——ueditor.整体来说性能还不错. 发现问题 我在做一个编辑页面 ...

  6. .net C# 图片转Base64 Base64转图片

    //图片 转为 base64编码的文本 private void button1_Click(object sender, EventArgs e) { OpenFileDialog dlg = ne ...

  7. MVC数据验证原理及自定义ModelValidatorProvider实现无编译修改验证规则和错误信息

    Asp.net MVC中的提供非常简单易用的数据验证解决方案. 通过System.ComponentModel.DataAnnotations提供的很多的验证规则(Required, StringLe ...

  8. knockoutjs with绑定导致unobtrusive validation失效的问题

    如果最初的时候with绑定的对象是空的,那么with绑定内部的unobtrusive validation规则在提交的时候无法生效,无法进行验证. 解决办法: 在提交的时候(或者with绑定的对象非空 ...

  9. partproble在RHEL 6下无法更新分区信息

    在RHEL5.x版本下面,在添加磁盘分区等操作后,一直使用partproble命令使内核重新读取分区表信息,从而不用重新启动.但是最近在RHEL 6(Red Hat Enterprise Linux ...

  10. ORA-00600: internal error code, arguments: [kcblasm_1], [103], [], [], [], [], [], []

    一ORACLE 10.2.0.5.0 标准版的数据库的告警日志出现ORA-00600错误,具体错误信息如下所示 Errors in file /u01/app/oracle/admin/SCM2/bd ...