C实现日志等级控制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <time.h> #define SJXC_LOG_DEBUG(level, format, arg...) SJXC_log_msg_print(level, __FILE__, __func__, __LINE__, format, ##arg) #ifdef SJXC_DISABLE_DEBUG
#define SJXC_REAL_DEBUG_LEVEL 0
#else
#define SJXC_REAL_DEBUG_LEVEL SJXC_DEBUG_LEVEL
#endif #define SJXC_ERROR (1 << 0)
#define SJXC_WARN (1 << 1)
#define SJXC_INFO (1 << 2)
#define SJXC_DEBUG (1 << 3) int SJXC_DEBUG_LEVEL = ; struct SJXC_gdb {
int level;
const char *msg;
}; struct SJXC_gdb SJXC_gdb_table[] = {
{SJXC_ERROR, "Config the log level as error."},
{SJXC_WARN, "Config the log level as warn."},
{SJXC_INFO, "Config the log level as info."},
{SJXC_DEBUG, "Config the log level as DEBUG."}
}; void SJXC_print_debuf_usage(void)
{
struct SJXC_gdb *p_gdb;
fprintf(stderr,
" To calculate the debug level, logically 'or'\n"
" some of the following values together to get a bebug level:\n");
for (p_gdb = SJXC_gdb_table; p_gdb < SJXC_gdb_table + (sizeof(SJXC_gdb_table) / sizeof(struct SJXC_gdb)); p_gdb++) {
fprintf(stderr, "\t%d:\t%s\n", p_gdb->level, p_gdb->msg);
}
fprintf(stderr, "\n");
} void SJXC_log_msg_print(int level, const char *file, const char *func, const int line, char *fmt, ...)
{
char *status; switch (level) {
case SJXC_ERROR:
status = "ERROR";
break;
case SJXC_WARN:
status = "WRAN";
break;
case SJXC_INFO:
status = "INFO";
break;
case SJXC_DEBUG:
status = "DEBUG";
break;
default:
printf("Debug message level ERROR!\n");
} if (SJXC_REAL_DEBUG_LEVEL & level) {
char msg_buf[*];
char *ascii_time_buf;
time_t tnow = time(NULL);
va_list ap; ascii_time_buf = asctime(localtime(&tnow));
ascii_time_buf[strlen(ascii_time_buf) - ] = '\0'; va_start(ap, fmt);
sprintf(msg_buf, " ------> [ %s %s:%s:%d ] %s ", ascii_time_buf, file, func, line, status);
vsprintf(msg_buf + strlen(msg_buf), fmt, ap);
fprintf(stderr, "%s\n", msg_buf);
va_end(ap);
}
} #if 1
int main(void)
{
int i = ;
printf("%d\n", SJXC_REAL_DEBUG_LEVEL);
SJXC_print_debuf_usage();
while( i != ) {
SJXC_log_msg_print(SJXC_ERROR, __FILE__, __func__, __LINE__, "");
i++;
}
return ;
}
#endif
C实现日志等级控制的更多相关文章
- log4cplus使用(二)-自定义日志等级
log4cplus支持用户自定义日志等级,操作也比较简单,使用之前贴如下宏定义 #define LOG4CPLUS_MACRO_CREASH_LOG_LEVEL(pred) LOG4CPLUS_UNL ...
- 13.scrapy框架的日志等级和请求传参
今日概要 日志等级 请求传参 如何提高scrapy的爬取效率 今日详情 一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是s ...
- python日志等级输出删选
有时候我们会删选一下输出的信息 当做日志进行文件保存 但是我们程序中有可能有自己不想存到日志文件中的输出信息 我们要做一些的删选 然后进行保存 代码如下: #!/usr/bin/python # - ...
- scrapy之日志等级
scrapy之日志等级 在settings.py中配置如下项: LOG_LEVEL = 'ERROR' # 当LOG_LEVEL设置为ERROR时,在进行日志打印时,只是打印ERROR级别的日志 这样 ...
- scrapy框架的日志等级和请求传参
日志等级 请求传参 如何提高scrapy的爬取效率 一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息 ...
- uniGUI日志的控制
uniGUI日志的控制 (2015-10-12 08:30:29) 转载▼ 标签: unigui 分类: uniGUI uniGUI本身提供了日志功能,利用uniServerModule.Server ...
- scrapy框架之日志等级和请求传参-cookie-代理
一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息. - 日志信息的种类: ERROR : 一般错误 ...
- Scrapy的日志等级和请求传参
日志等级 日志信息: 使用命令:scrapy crawl 爬虫文件 运行程序时,在终端输出的就是日志信息: 日志信息的种类: ERROR:一般错误: WARNING:警告: INFO:一般的信息: ...
- CEF之CefSettings设置日志等级
CefSettings结构体允许定义全局的CEF配置,经常用到的配置项如下: single_process 设置为true时,Browser和Renderer使用一个进程.此项也可以通过命令行参数“s ...
随机推荐
- 文献阅读报告 - Context-Based Cyclist Path Prediction using RNN
原文引用 Pool, Ewoud & Kooij, Julian & Gavrila, Dariu. (2019). Context-based cyclist path predic ...
- 广义高斯分布(GGD)和非对称广义高斯分布(AGGD)
<No-Reference Image Quality Assessment in the Spatial Domain>,BRISQUE. 1. 广义高斯分布,generalized G ...
- Sqlserver 增删改查----增
注意我说的常见查询,可不是简单到一个表得增删改查,做过实际开发得人都知道,在实际开发中,真正牵扯到一个表得增删改查只能说占很小得一部分,大多都是好几个表的关联操作的. 下面我就说一下我在实际开发中经常 ...
- 2020/2/1 PHP代码审计之任意文件读取及删除漏洞
在开始学习之前先简单记录一下自己现在的思路吧..现在接触的基本都是无防护的漏洞也就是最简单的一些漏洞.我的想法就是以代审思路为主,之前一直在打CTF,白盒的思维我觉得和CTF这种黑盒有很大区别.自己的 ...
- Java中String类为什么被设计为final?
Java中String类为什么被设计为final 首先,String是引用类型,也就是每个字符串都是一个String实例.通过源码可以看到String底层维护了一个byte数组:private f ...
- JS-语句四
For 循环: for 循环是创建循环时常会用到的工具. 下面是 for 循环的语法: ; 语句 ; 语句 ) { 被执行的代码 } 其中语句1是初始值:语句2是.条件判断:语句3是状态改变:被执行的 ...
- 云服务器Linux版本下---安装git
xshell进入云服务器: 按照git官网:https://git-scm.com/download/linux 的教程输入: apt-get install git 本地没有包????? 原来是 ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 临时表
MySQL 临时表在我们需要保存一些临时数据时是非常有用的.临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间. MySQL临时表只在当前连接可见,如果使用PHP脚本来创建My ...
- docker 批量命令
docker中 启动所有的容器命令: docker start $(docker ps -a | awk '{ print $1}' | tail -n +2) docker中 关闭所有的容器命 ...
- ZooKeeper解决的问题
1.解决分布式单点问题 https://www.jianshu.com/p/08b76bd7a634 2.实现分布式环境数据的一致性.访问ZooKeeper树结构时,不同节点返回的数据是一致,不会引起 ...