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 + ];
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)的更多相关文章
- zlog学习笔记(level_list)
level_list.h /** * */ #ifndef __zlog_level_list_h #define __zlog_level_list_h zc_arraylist_t *zlog_l ...
- zlog学习笔记(mdc)
mdc.h #ifndef __zlog_mdc_h #define __zlog_mdc_h #include "zc_defs.h" typedef struct zlog_m ...
- zlog学习笔记(zc_hashtable)
zc_hashtable.h /** * hashtable */ #ifndef __zc_hashtable_h #define __zc_hashtable_h typedef struct z ...
- zlog学习笔记(zc_arraylist)
zc_arraylist.h /** * 实现类似列表的功能 * */ #ifndef __zc_arraylist_h #define __zc_arraylist_h #define ARRAY_ ...
- zlog学习笔记(zc_profile)
zc_profile.h #ifndef __zlog_profile_h #define __zlog_profile_h #define EMPTY() #define zc_assert(exp ...
- Linux 学习笔记
Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...
- Android M Permission 运行时权限 学习笔记
Android M Permission 运行时权限 学习笔记 从Android 6.0开始, 用户需要在运行时请求权限, 本文对运行时权限的申请和处理进行介绍, 并讨论了使用运行时权限时新老版本的一 ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- 两千行PHP学习笔记
亲们,如约而至的PHP笔记来啦~绝对干货! 以下为我以前学PHP时做的笔记,时不时的也会添加一些基础知识点进去,有时还翻出来查查. MySQL笔记:一千行MySQL学习笔记http://www.cnb ...
随机推荐
- java 中 return 的两种常见的用法
一:return语句总是用在方法中,有两个作用: 一个是返回方法指定类型的值(这个值总是确定的), 一个是结束方法的执行(仅仅一个return语句). 二:实例1 -- 返回一个String priv ...
- Android java传递string类型数据给C
本文接着实现<Android java传递int类型数据给C>的还未实现的方法: public native String sayHelloInC(String s); 先贴一个工具方法, ...
- 【代码笔记】iOS-将图片处理成圆的
一,效果图. 二,工程图. 三,代码. ViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional ...
- 开放-封闭原则(OCP)开-闭原则 和 依赖倒转原则,单一职责原则
单一职责原则 1.单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的原因 2.如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会消弱或抑制这个类完成其他职责的能力. ...
- Oracle与MySQL的区别
1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高. 2. Oracle支持大并发,大访 ...
- ORACLE与mysql中查询第n条到第m条的数据记录的方法
ORACLE: SELECT * FROM ( SELECT 表名.*, ROWNUM AS CON FROM 表名 WHERE ROWNUM ...
- js 百度地图
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 浅谈游标选项 Static|Keyset|DYNAMIC|FAST_FORWARD
接好久之前太监的一篇Blog.现在补充几个选项的介绍 所用的语句都是这个 IF OBJECT_ID('T1') IS NOT NULL DROP TABLE T1 GO CREATE TABLE T1 ...
- OpenResty(nginx+lua) 入门
OpenResty 官网:http://openresty.org/ OpenResty 是一个nginx和它的各种三方模块的一个打包而成的软件平台.最重要的一点是它将lua/luajit打包了进来, ...
- openstack-kilo--issue(九) heat stacks topology中图形无法正常显示
======声明======= 欢迎转载:转载请注明出处 http://www.cnblogs.com/horizonli/p/6186581.html ==========环境=========== ...