一、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 //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$ lsclog.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 #include #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文件信息
四、源碼獲取
點擊下載資料獲取
一口君原創得所有c語言基礎知識、c語言實例代碼,均整理成pdf文檔【定期更新】