1、在專案的執行過程中需要記錄或現實**的執行流程和錯誤資訊,但在不同的階段需要的功能不同:
除錯階段:需要在螢幕顯示執行過程和錯誤資訊
運營階段:需要在檔案中記錄下來執行過程和錯誤資訊
2、根據錯誤原因一般段錯誤分為收下四個等級:
致命錯誤 log_fatal
警告 log_warning
錯誤 log_error
提示資訊 log_info
3、如何實現檔案和終端都可寫入的?
因為在linux系統下一切皆檔案,終端的檔案指標就是stdout。
使用fprintf和file可以實現既可以現實到螢幕,也可以記錄到檔案。
4、如何區分除錯還是執行?
使用#ifdef 判斷debug巨集是否定義來判斷。
debug巨集既可以在**中通過#define來定義,也可以在編譯中使用 -d 定義。
5、如何讓巨集函式想printf一樣可以引數自動化?
使用巨集函式的變長引數…,配合格式控制 ##va_args獲取巨集函式的引數。
6、要注意的問題?
1、一定要呼叫初始化函式
2、日誌的級別,log_fatal < log_warning < log_error < log_info 級別越高顯示的內容越多,級別越低現實的內容越重要。
#ifndef log_h
#define log_h
#include
//日誌級別
typedef
enum loglevel
loglevel;
//記錄使用者設定的日誌級別的全域性變數
extern loglevel log_level;
//日誌檔案的檔案指標
extern file* ffp;
extern file* wfp;
extern file* efp;
extern file* ifp;
//初始化日誌
void
log_init
(const
char
* log_path,
const
char
* program,loglevel level)
;#define flog(fmt,...)\\}\
#define elog(fmt,...)\\}\
#define wlog(fmt,...)\\}\
#define ilog(fmt,...)\\}\
#endif
//log_h
#include
"log.h"
#include
//記錄使用者設定的日誌級別的全域性變數
loglevel log_level;
//日誌檔案的檔案指標
file* ffp;
file* wfp;
file* efp;
file* ifp;
//初始化日誌
void
log_init
(const
char
* log_path,
const
char
* program,loglevel level)
;sprintf
(path,
"%s/%s_fatal.log"
,log_path,program)
; ffp =
fopen
(path,
"a")
;sprintf
(path,
"%s/%s_error.log"
,log_path,program)
; efp =
fopen
(path,
"a")
;sprintf
(path,
"%s/%s_warning.log"
,log_path,program)
; wfp =
fopen
(path,
"a")
;sprintf
(path,
"%s/%s_info.log"
,log_path,program)
; ifp =
fopen
(path,
"a")
;#endif
}
#include
#include
"log.h"
intmain
(int argc,
const
char
* ar**)
log日誌檔案配置
定義檔案最大大小 超過就生成新的檔案 按時間生成檔案 指定monthly 每月 weekly 每週 daily 每天 half daily 每半天 hourly 每小時 和minutely 每分鐘 yyyy mm,對應monthly 每月 yyyy ww,對應weekly 每週 yyyy mm dd...
linux下log日誌檔案
var log 常用日誌都在裡面 var log messages 常見問題日誌 tail f 實習顯示檔案 var log secure 安全資訊 登入 密碼日誌 var log wtmp 安全資訊 登入 密碼日誌 刪除不了 用last命令顯示 var log xferlog ftp日誌 var ...
Qt生成log日誌檔案
本文在qt程式中實現了日誌功能,讀者可以在此基礎上進一步創作和拓展 系統日誌一般指存放系統重要執行資訊的log.txt檔案,主要作用有兩個 1.記錄系統重要的執行資訊 2.當系統突然崩潰時,可以根據日誌來跟蹤和定位程式錯誤。qt 提供 qinstallmessagehandler qt5 或者qin...