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两个版本的库如下图所示:
二,至此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