zlog的移植调试


zlog的移植调试

最近在嵌入式C语言开发项目中添加一个比较完善的日志系统,前期研究了下syslog,最后还是选择了简单易用的zlog,其优势及详细用法直接看手册(zlog使用手册中文版): http://hardysimpson.github.io/zlog/UsersGuide-CN.html

若链接进不去可自行下载:https://download.csdn.net/download/fangye945a/10902503
————————————————

一、zlog的下载、编译与安装

这里下载的是

#azan@ubuntu: git clone https://github.com/HardySimpson/zlog.git   //下载源码包
#azan@ubuntu: cd zlog   //进入工程目录
#azan@ubuntu: mkdir build_linux build_arm  //创建文件夹用于存放工程输出内容
#azan@ubuntu: vim src/makefile           //修改makefile中的PREFIX为自己创建的目录build_arm,如下所示,
# Installation related variables
PREFIX?=../build_arm
INCLUDE_PATH=include
LIBRARY_PATH=lib
BINARY_PATH=bin
INSTALL_INCLUDE_PATH= $(PREFIX)/$(INCLUDE_PATH)
INSTALL_LIBRARY_PATH= $(PREFIX)/$(LIBRARY_PATH)
INSTALL_BINARY_PATH=  $(PREFIX)/$(BINARY_PATH)

#azan@ubuntu: make          //默认gcc编译,若需要交叉编译指定编译工具链即可:make CC=arm-linux-xxx-gcc
#azan@ubuntu: make install  //将生成的库和工具拷贝至自己创建的目录

编译生成arm和linux两个版本的库如下图所示:

img

二,至此zlog编译完成可以使用了

编译后的build_arm目录bin下的zlog-chk-conf拷贝到系统文件bin下,应用代码包含include/zlog.h和lib动态库

#include "../includess/zlog.h"
int main(int argc, char *argv[]) 
{
   int rc;
   rc = dzlog_init("/etc/zlog.conf", "my_class"); //指定配置文件路径及类型名 初始化zlog
   if (rc) 
   {
       printf("init failed\n");
       return -1;
   }
   dzlog_info("hello, zlog info"); //打印普通信息
   dzlog_error("hello, zlog error");//打印错误信息
   dzlog_warn("hello, zlog warning"); //打印报警信息
   dzlog_debug("hello, zlog debug"); //打印调试信息
   zlog_fini();  //释放zlog
}

这里应用代码采用的是CMAKE编译,在CMakeLists.txt里添加库和链接操作

LINK_DIRECTORIES(./zlog-1.2.15/build_arm/lib/)
TARGET_LINK_LIBRARIES(tapp zlog pthread m )

编译应用代码生成app

 Building CXX object CMakeFiles/tapp.dir/zmkzlibdata/iocontrol.cpp.o
[ 93%] Building CXX object CMakeFiles/tapp.dir/zmkzlibdata/mbtcp_slaver.cpp.o
[ 95%] Building CXX object CMakeFiles/tapp.dir/zmkzlibdata/ndw.cpp.o
[ 96%] Building CXX object CMakeFiles/tapp.dir/zmkzlibdata/udpbrd.cpp.o
[ 98%] Building CXX object CMakeFiles/tapp.dir/zmkzlibdata/zmkzmain.cpp.o
[100%] Linking CXX executable tapp
[100%] Built target tapp
azan@ubuntu:~/nwjzq/sc/zmkz$ 

至此应用代码部分移植完成

三、调试环境搭建

创建zlog配置文件zlog.conf,rules规则里配置同时调试口和文件日志输出,注意在运行前要先创建保存日志的文件log.xxx,这里直接创建了log.txt,

[global]
strict init = true
buffer min = 1024
buffer max = 2MB
rotate lock file = /tmp/zlog.lock
default format = "%d.%us %-6V (%c:%F:%L) - %m%n"
file perms = 600

[rules]
my_class.* >stdout;
my_class.* "/xxx/xxx/log.txt", 1M;

通过zlog-chk-conf对zlog.conf进行语法检查,没有报错如下

#./zlog-chk-conf /etc/zlog.conf
--[/etc/zlog.conf] syntax right

zlog.conf拷贝到文件系统/etc目录下,lib下的所有库文件拷贝到文件系统lib目录,bin目录拷贝到文件系统对应bin目录,至此环境配置完成

三、测试验证

日志会记录时间,代码位置,打印信息
同时在打印控制台也同时输出同样日志记录
如果需要对打印信息进行配置可通过rules规则配置进行分类配置,待后面详细研究

#cat log.txt
2022-05-26 11:51:33.140000 INFO   (my_class:/Main.c:336) - hello, zlog info
2022-05-26 11:51:33.140000 ERROR  (my_class:/Main.c:337) - hello, zlog error
2022-05-26 11:51:33.140000 WARN   (my_class:/Main.c:338) - hello, zlog warning
2022-05-26 11:51:33.140000 DEBUG  (my_class:/Main.c:339) - hello, zlog debug

相关