linux下C语言实现写日志功能
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,先上程序,该程序经过测试能够很好的实现写日志要求/*************************************************************************
千家信息网最后更新 2025年12月03日linux下C语言实现写日志功能
先上程序,该程序经过测试能够很好的实现写日志要求
/************************************************************************* > File Name: log.c > Author: ************************************************************************/#include#include #include #include #include #include #include #include #include int safe_asprintf(char **strp, const char *fmt, ...);int safe_vasprintf(char **strp, const char *fmt, va_list ap);void plog(const char *format, ...) ;void pinfo(const char *format, ...) ;#define DEBUG#ifdef DEBUGvoid plog(const char *format, ...);void pinfo(const char *format, ...);#define debug(fmt, args...) plog(fmt, ##args) #else#define debug(fmt, args...) do{}while(0)#endifstatic pthread_mutex_t fileMutex = PTHREAD_MUTEX_INITIALIZER;int main(int argc, char *argv){ return 0;}/* * safe_asprintf(); */int safe_asprintf(char **strp, const char *fmt, ...) { va_list ap; int retval; va_start(ap, fmt); retval = safe_vasprintf(strp, fmt, ap); va_end(ap); return retval;}/* * safe_vasprintf(); */int safe_vasprintf(char **strp, const char *fmt, va_list ap) { int retval; retval = vasprintf(strp, fmt, ap); if (retval == -1) { printf("Failed to vasprintf: %s. Bailing out\n", strerror(errno)); return 1; } return retval;}/* * plog(); */void plog(const char *format, ...) { pthread_mutex_lock(&fileMutex); FILE *fp = NULL; va_list vlist; char *fmt = NULL; // Open debug info output file. if (!(fp = fopen("log.txt", "a+"))) { pthread_mutex_unlock(&fileMutex); return; } va_start(vlist, format); safe_vasprintf(&fmt, format, vlist); va_end(vlist); if (!fmt) { pthread_mutex_unlock(&fileMutex); return; } time_t timep; struct tm *ptm = NULL; time(&timep); ptm = localtime(&timep); fprintf(fp, "[d-d-d-d-d-d] %s", ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec, fmt); free(fmt); fsync(fileno(fp)); fclose(fp); pthread_mutex_unlock(&fileMutex);}/* * pinfo(); */void pinfo(const char *format, ...) { pthread_mutex_lock(&fileMutex); FILE *fp = NULL; va_list vlist; char *fmt = NULL; // Open debug info output file. if (!(fp = fopen("log.txt", "a+"))) { pthread_mutex_unlock(&fileMutex); return; } va_start(vlist, format); safe_vasprintf(&fmt, format, vlist); va_end(vlist); if (!fmt) { pthread_mutex_unlock(&fileMutex); return; } fprintf(fp, "%s", fmt); free(fmt); fsync(fileno(fp)); fclose(fp); pthread_mutex_unlock(&fileMutex);}
程序实现的日志格式为:
时间 + 空格 + 具体实现(自己的调试内容)
本段程序值得学习的地方:
- va_list 结构体的使用
- linux 的格式化输出字符串
- 文件操作过程中pthread_mutex锁的使用,以及他的优点
- linux DEBUG 的应用,方便调试
linux如何查看日志:
使用tail 命令可以实现日志的查询,以及其他功能,不了解的话,自行查资料解决。
对上面应用不明白的请自行查资料解决。
日志
程序
格式
资料
应用
功能
优点
内容
命令
地方
字符
字符串
文件
时间
空格
结构
过程
学习
查询
测试
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库技术与应用招聘岗位
国外有名的网络安全网站
服务器安全模式怎么进去
宁波互联网软件开发的公司
航天a6数据库读取失败
360网络安全学院真假
四川工业软件开发正规平台
陇星诺网络技术
一级服务器统一管理
财务软件开发助理
语音服务器访问异常是怎么回事
首个烈士DNA数据库
使用pg开源代码的数据库
芬芳互联网科技酱
12123服务器繁忙怎么挤进去
21年数据库运维试题答案
网络安全法律援助中心电话
上海特定软件开发参考价
最好的网络技术讲解
计算机网络技术测试题名词解释
点买a股软件开发
睿琪软件开发笔试题
软件开发过程的迭代
软件开发者英文缩写
竞彩走势服务器
天弘互联网是科技基金吗
美姿满软件开发
外文电子期刊数据库
检查网络安全总结
新闻计算机网络技术好找工作吗