linux下c c 例項之二日誌記錄及檔案讀取

2021-07-06 10:18:15 字數 2471 閱讀 4468

linux下封裝一些函式將需要的日誌資訊列印到控制台或寫入檔案,並讀取檔案。

(1)**writelog.cpp

/*日誌記錄*/

#include #include #include #include #include #include #include #include #include enum switch_mode

;int file_fd = -1;

int log_file(switch_mode mode = mode_day)

; char filetime[32] = ;

struct tm tm_time;

time_t t_log;

std::string log_time = "";

assert(getcwd(file_path, 512) != null); //當前目錄

if (file_path[strlen(file_path) - 1] != '/')

if(access(file_path, f_ok) != 0)

t_log = time(null);

localtime_r(&t_log, &tm_time);

strftime(filetime, sizeof(filetime), "%y%m%d%h%m%s", &tm_time); //日誌的時間

switch(mode)

strcat(file_path, "log_");

strcat(file_path, log_time.c_str());

strcat(file_path, ".log");

assert(file_fd != -1);

return 0;

}void write_cmd(const char *fmt,...)

int write_log(const char *msg, ...)

; //當前時間記錄

va_list vl_list;

va_start(vl_list, msg);

char content[1024] = ;

vsprintf(content, msg, vl_list); //格式化處理msg到字串

va_end(vl_list);

time_t time_write;

struct tm tm_log;

time_write = time(null); //日誌儲存時間

localtime_r(&time_write, &tm_log);

strftime(final, sizeof(final), "[%y-%m-%d %h:%m:%s] ", &tm_log);

strncat(final, content, strlen(content));

assert(msg != null && file_fd != -1);

assert( write(file_fd, final, strlen(final)) == strlen(final));

return 0;

}void close_file()

/******************日誌記錄測試******************/

int main()

(2)編譯執行

g++ -o writelog writelog.cpp
執行控制台顯示:

檔案log_20151105.log內容:

(2)編譯執行

gcc -o readdata readdata.c

./readdata log_20151105.log

(1)上述寫日誌的**對於較長的日誌會導致段錯誤,需要修改**。當然也可以參考qt或c++式的日誌,可以記錄無限長的日誌。

(2)讀取日誌中採用了兩種不同方式,建議採用第一種動態分配記憶體大小,第二種對於大檔案會導致段錯誤。

工程管理之二 日誌初始化工具

現在公司工作中使用的日誌工具是slf4j logback。初始化工具類實現如下 public class logutil file.getabsolutepath else url statusprinter.printincaseoferrorsorwarnings lc catch jorane...

Kafka日誌儲存解析(二)日誌索引

每個日誌分段檔案對應了兩個索引檔案,主要用來提高查詢訊息的效率。如上圖 kafka中的索引檔案屬於稀疏索引,不是所有的訊息都有對應的索引項。每當寫入一定量 由broker端引數log.index.interval.bytes指定,預設是4kb 的訊息時,偏移量索引檔案和時間戳索引檔案分別增加乙個偏移...

Raft 演算法詳解(二)日誌複製

在 raft 演算法中,副本資料是以日誌的形式存在的,領導者接收到來自客戶端寫請求後,處 理寫請求的過程就是乙個複製和提交日誌項的過程。那 raft 是如何複製日誌的呢?又如何實現日誌的一致的呢?這些內容是 raft 中非常核心 的內容,首先,咱 們先來理解日誌,這是你掌握如何複製日誌 實現日誌一致...