当前位置 : 主页 > 网络编程 > 其它编程 >

linuxc日志功能实现

来源:互联网 收集:自由互联 发布时间:2023-07-02
一般linux下的c语音项目都会通过打印进行调试,简单临时的可能就使用printf函数进行凑合了,但是对于大一点的项目就不是很方便了,现在也有很多开源软件里面都有进行相应的日志功
一般linux下的c语音项目都会通过打印进行调试,简单临时的可能就使用printf函数进行凑合了,但是对于大一点的项目就不是很方便了,现在也有很多开源软件里面都有进行相应的日志功能的封装,不过

一般linux 下的c语音项目都会通过打印进行调试,简单临时的可能就使用printf函数进行凑合了,但是对于大一点的项目就不是很方便了,现在也有很多开源软件里面都有进行相应的日志功能的封装,不过那对于自己开发的项目调用就没那么简单了,所以基于此背景,写下自己的一点思路供大家参考,欢迎对不足的地方指出完善。

下面就把代码贴出来。

log.h

#ifndef _LOG_H#define _LOG_H#include #include #defineMAX_LOG_LEN1024/* 添加了打印语句所在的文件、行号、函数信息 */#define C_LOG(level, fmt, argc...) log_message(level, "[file:%s,line:%d,func:%s]" fmt, __FILE__, __LINE__, __FUNCTION__, ##argc) #endif log.c

#include #include #include "log.h"static const char *log_level_str[] = {[LOG_EMERG] = "EMERG",[LOG_ALERT] = "ALERT",[LOG_CRIT] = "CRIT",[LOG_ERR] = "ERR",[LOG_WARNING] = "WARNING",[LOG_NOTICE] = "NOTICE",[LOG_INFO] = "INFO",[LOG_DEBUG] = "DEBUG",};static void get_current_time(char *buf, int len){time_t timep;struct tm *p;time(p = gmtime(snprintf(buf, len - 1, "%d/%d/%d %d-%d-%d", (1900 + p->tm_year), (1 + p->tm_mon), p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec);}static void vlog_message(const int level, const char* fmt, va_list args){char buf[MAX_LOG_LEN+1] = {0};char time[128] = {0};get_current_time(time, sizeof(time) - 1);vsnprintf(buf, sizeof(buf), fmt, args);/* 可以在这里组装需要的信息 */fprintf(stderr, "%s[%s]%s\n", time, log_level_str[level], buf); /* 时间,级别,位置,日志内容 *//* cat /var/log/messages 进行日志查看 */syslog(level, "%s", buf);}void log_message(const int level, const char *fmt, ...){va_list args;va_start(args, fmt);vlog_message(level, fmt, args);va_end(args);}main..c

/* * * 说明:日志模块调用测试使用,仅供参考。 *函数使用可以网上查询具体参数含义 * */#include "log.h"int main(int argc, char **argv){/* 打开一个到系统日志记录程序的连接,打开之后就可以用syslog或vsyslog函数向系统日志里添加信息了 */openlog("APP", LOG_PID, 0); /* 用来设置记录日志的优先级,即只记录指定优先级的日志消息 */setlogmask(LOG_UPTO(LOG_INFO));C_LOG(LOG_INFO, "ABC LOG_NOTICE");C_LOG(LOG_INFO, "ABC LOG_INFO");C_LOG(LOG_DEBUG, "ABC LOG_DEBUG");/* 关闭被用于与syslog守护进程通信的描述符 */closelog();return 0;} 编译:gcc main.c log.c -o main

运行:./main2016/12/14 13-34-23[INFO][file:main.c,line:18,func:main]ABC LOG_NOTICE2016/12/14 13-34-23[INFO][file:main.c,line:19,func:main]ABC LOG_INFO2016/12/14 13-34-23[DEBUG][file:main.c,line:20,func:main]ABC LOG_DEBUG查看结果:tail -f /var/log/messages Dec 14 05:11:54 localhost NetworkManager[1971]: prefix 24 (255.255.255.0)Dec 14 05:11:54 localhost NetworkManager[1971]: gateway 192.168.0.1Dec 14 05:11:54 localhost NetworkManager[1971]: nameserver '222.246.129.80'Dec 14 05:11:54 localhost NetworkManager[1971]: nameserver '59.51.78.210'Dec 14 05:11:54 localhost NetworkManager[1971]: domain name 'DHCP'Dec 14 05:11:54 localhost NetworkManager[1971]: domain name 'HOST'Dec 14 05:17:29 localhost APP[26091]: [file:main.c,line:18,func:main]ABC LOG_NOTICEDec 14 05:17:29 localhost APP[26091]: [file:main.c,line:19,func:main]ABC LOG_INFODec 14 05:34:23 localhost APP[26372]: [file:main.c,line:18,func:main]ABC LOG_NOTICEDec 14 05:34:23 localhost APP[26372]: [file:main.c,line:19,func:main]ABC LOG_INFO

上一篇:javascriptABSlodash.js
下一篇:没有了
网友评论