c语言实例|实现log子模块_c语言 log

c语言实例|实现log子模块_c语言 log

编码文章call10242025-09-17 20:52:172A+A-

一、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的不显示也不保存
在生产环境中设置较高级别的日志(如 ERROR 或WARNING),而在开发和测试期间则开启更详细的日志(DEBUG 或 TRACE)。

int quiet

log信息是否打印到屏幕

  • 宏开关LOG_USE_COLOR

打印信息是否显示颜色

库函数说明

函数名

功能说明

log_set_fp()

设置存储log信息的文件句柄

log_set_lock()

设置自定义的锁回调函数
函数原型**typedef void (
log_LockFn)(void udata, int 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文档【定期更新

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4