c语言实例|实现log子模块_c语言 log
一、log.c 介绍
log.c 是一个极为简约的 C 语言日志库,由 akstuki 开发维护。该项目旨在提供一个轻量级、易于集成的解决方案,让开发者能够迅速地在他们的 C 应用程序中添加日志记录功能。
尽管其体积小巧,仅由一个 .c 文件和一个 .h 文件组成,总计不超过 200 行代码,但 log.c 依然具备足够的灵活性来满足基础的日志需求,包括不同的日志级别、输出到文件的能力,以及线程安全性。
应用场景
log.c 作为一个独立组件,适用于众多 C 语言项目,特别是在嵌入式系统和小型服务应用中。虽然没有直接的“生态项目”列表,但由于其通用性,它可与任何需要日志记录功能的 C 项目结合使用。
例如,它可以被集成到物联网设备固件、服务器后台管理工具或是任何形式的客户端-服务器架构的应用中。
用户可以根据自己的具体应用场景定制化扩展,比如通过简单的修改或增加适配器(Appenders)实现日志远程发送至日志收集服务。
通过以上介绍和指导,你应该已经掌握了如何快速地将 log.c 引入到你的 C 项目中,并有效地利用它来进行日志管理。记得在实际应用中根据具体需求进行适当的配置和优化。
源码下载
由于 log.c 是纯 C 代码构成,集成到项目中通常不需要复杂的步骤。直接下载或通过 Git 克隆仓库即可开始使用:
git clone https://github.com/akstuki/log.c.git
二、功能介绍
结构体
static struct {
void *udata;
log_LockFn lock;
FILE *fp;
int level;
int quiet;
} L;
成员 | 功能 |
void *udata | 自定义锁回调函数的私有信息 |
log_LockFn lock | 自定义的锁回调函数,用于互斥访问文件,不同平台锁机制不同 |
FILE *fp | 存储log信息的文件句柄 |
int level | 显示和保存的log信息等级,低于level的不显示也不保存 |
int quiet | log信息是否打印到屏幕 |
- 宏开关LOG_USE_COLOR
打印信息是否显示颜色
库函数说明
函数名 | 功能说明 |
log_set_fp() | 设置存储log信息的文件句柄 |
log_set_lock() | 设置自定义的锁回调函数 |
log_set_udata() | 设置自定义的锁回调函数私有信息 |
log_set_quiet() | 设置log信息是否打印到屏幕,1:不打印 0:打印 |
log_set_level() | 设置显示和保存的log信息等级 |
三、实例讲解
在你的 C 项目中包含 log.h 头文件,并链接 log.c 到你的构建过程中。
本例创建一个主程序文件main.c
peng@ubuntu:~/work/log/src$ ls
clog.cpp clog.h log.c log.h main.c
如果是c++环境,用clog.cpp文件
1、示例代码
/*
* main.c
* Copyright 2024 -yikoupeng <21689991@qq.com>
* This program is under a GPLv3+ license.
* log demo
* 关注公众号:一口Linux
*/
#include <stdio.h>
#include <pthread.h>
#include "log.h"
#define LOG_FILE_NAME "peng.log"
pthread_mutex_t log_mutex;
void log_mutex_fn(void *udata, int lock)
{
if(lock==1)
{
//lock
pthread_mutex_lock(&log_mutex);
}else if(lock==0){
//unlock
pthread_mutex_unlock(&log_mutex);
}
return;
}
void my_log_lock_init(char *info)
{
pthread_mutex_init(&log_mutex,NULL);
log_set_lock(&log_mutex_fn);
log_set_udata(info);
}
void my_fp_init(char *filename)
{
FILE * fp = fopen(filename,"w+");
if(fp == NULL)
{
printf("%s open fail\n",filename);
}
log_set_fp(fp);
}
int main(int argc, char **argv)
{
//设置锁回调函数
my_log_lock_init("peng");
//设置log文件句柄
my_fp_init(LOG_FILE_NAME);
//log信息打印到屏幕
log_set_quiet(0);
//设置日志级别为LOG_TRACE
printf("设置日志级别为LOG_TRACE.\n");
log_set_level(LOG_TRACE);
// 进行一些操作...
log_trace("一口Linux.");
log_debug("一口Linux.");
log_info("一口Linux.");
log_warn("一口Linux.");
log_error("一口Linux.");
log_fatal("一口Linux.");
//设置日志级别为LOG_ERROR
printf("设置日志级别为LOG_ERROR.\n");
log_set_level(LOG_ERROR);
// 进行一些操作...
log_trace("一口Linux.");
log_debug("一口Linux.");
log_info("一口Linux.");
log_warn("一口Linux.");
log_error("一口Linux.");
log_fatal("一口Linux.");
return 0;
}
2、编译
确保在编译时一起编译 log.c 文件,或者如果是在 Makefile 中,则确保它被正确链接。
peng@ubuntu:~/work/log/src$ gcc main.c log.c -o run
3、运行
4、查看log文件信息
四、源码获取
完整代码,转发回复:log
一口君原创得所有c语言基础知识、c语言实例代码,均整理成pdf文档【定期更新
】