大家好,我是杂烩君。
祝各位假期愉快!
今天看一篇短小的技术文~ 上次分享了分享嵌入式软件调试方法及几个有用的工具!。 其中有简单提到log滚动覆盖,就有小伙伴来问怎么做log滚动覆盖,本篇文章我们就来介绍一种log滚动覆盖的方法。 其实,我们之前有分享过的,大家可能没注意。 我们之前的周记嵌入式大杂烩周记 | 第 7 期 : zlog 的zlog这个开源日志库就具备这个功能。 这里我们来简单地演示一下。 例子: #include <stdio.h> #include <unistd.h> #include "zlog.h"
int main(int argc, char** argv) { int rc; zlog_category_t *zc;
rc = zlog_init("test.conf"); if (rc) { printf("init failed\n"); return -1; }
zc = zlog_get_category("my_cat"); if (!zc) { printf("get cat fail\n"); zlog_fini(); return -2; } zlog_info(zc, "微信公众号:嵌入式大杂烩"); int i = 0; while (1) { zlog_info(zc, "hello, zlog, %d", i++); usleep(1000); }
zlog_fini(); return 0; }
zlog的配置文件test.conf: [formats] simple = "%d.%us %m%n" [rules] my_cat.INFO "./log/demo.log",1KB*5~"./log/demo.log.#r";simple
上面标明当log存储超过1KB时,则存放到另一个文件,在5个文件来回循环,r代表逆序,如先存满demo.log4,再存demo.log3。 编译: gcc test.c -o test_zlog -I ./build_x86/include -L ./build_x86/lib/ -lzlog -lpthread
运行得到: log分为了几份,看log的时候也不是很方便呀? 为了方便分析,我们可以写个简单的shell脚本把log进行合并: #!/bin/bash
##################################################################### # 脚本功能:log合并 ##################################################################### # 存log的路径 LOG_PATH=.
# 合成的文件 APP_MERGE_LOG_FILE=${LOG_PATH}/app_log_$(date +%m%d_%H%M)
# 总app log文件合成 touch ${APP_MERGE_LOG_FILE} for i in 4 3 2 1 0; do $(cat demo.log.${i} >> ${APP_MERGE_LOG_FILE} 2>&1) done $(cat demo.log >> ${APP_MERGE_LOG_FILE} 2>&1) echo "merge app_log success!! file_name: ${APP_MERGE_LOG_FILE}"
我们可以观察log的特点进行合并。比如可以通过文件创建的时间顺序来合并。或者log是存在嵌入式Linux板上,也可以借助rsync工具把log同步到本地之后根据时间来合并。这类情况的合并的脚本我们之前也有分享过,传送门: 分享嵌入式中几个实用的shell脚本! 以上就是本次的分享~ 如果觉得文章有帮助,麻烦帮忙点赞、收藏、转发,谢谢!
|