开源日志库 [log4c] 使用

log4c简介

Log4c是一个C库,用于灵活地记录文件、系统日志和其他目的地。它是根据Java库的日志建模的(http://jakarta.apache.org/log4j/),尽可能接近其API。这里是对Log4j的简短介绍,它描述了API和设计原理。

马克·孟德尔以不同的理念启动了一个平行的log4c项目。该设计是面向宏的,因此更轻、更快,非常适合内核开发。

Log4c也可从SourceForge获得 ( http://www.sourceforge.net/projects/log4c/ ). 这是正在进行的工作。

要求平台

log4c已成功编译并在以下平台上运行:

HP-UX release 11.00
Tru 64 release 4.0F and 5.1
Red Hat Linux Intel release 7.x, 8, 9
Red Hat Enterprise Linux 3, 4
Solaris Intel release 8, 9, 10
FreeBSD 6.1-RELEASE
AIX 5.3 (with xlc compiler)
Mac OS X
Windows X
...and other Linux distributions

log4c应在以下平台上编译和运行:

The BSD family
MS Windows

软件需求

生成 log4c 需要以下软件

GCC 3.0.1+, to generate log4c, but hopefully not to use it.
doxygen 1.2.13+, a documentation system for C/C++ needed to generate the documentation.
graphviz, the AT&T Graph Visualization Tools also needed to generate the documentation.

目前,log4c使用特定的GCC扩展,比如attribute,所以您需要GCC来编译它。这可能有一天会改变。

log4c 下载、编译、安装

下载

官方下载链接

编译、安装

$ gzip -dc log4c-1.2.4.tar.gz | tar tvf -
$ cd log4c-1.2.4/
$ ./configure --enable-static --prefix=/home/ww/ww/gitlabproject/opcodetester/third/log4c-install/ CC="gcc -m32"
$ make
$ make install

log4c 通用使用方式

代码中使用

#include "log4c.h"
int main()
{
	//初始化
	log4c_init();
	//获取一个已有的category
	log4c_category_t* mycat = log4c_category_get("mycat"); 
	//用该category进行日志输出,优先级为DEBUG,输出信息为 "Hello World!"
	log4c_category_log(mycat, LOG4C_PRIORITY_DEBUG, "Hello World!");  

	return 0;
}
	

如果你直接使用这种方式去打印,你会发现虽然程序编译和运行都没有报错,但是最终的打印信息并没有打印出来。这是因为通用方式中还依赖配置文件的参数来进行初始化。

配置文件

Log4c和所有Log4j系的log工具一样,都是可以通过文件配置log特性的。其配置文件采用xml形式,通常叫做log4crc。通过修改log4crc,可以达到配置log4c的目的。
以上代码片段其对应的log4crc可以是

<?xml version="1.0" encoding="ISO-8859-1"?>
	<!DOCTYPE log4c SYSTEM ""> 
	<log4c version="1.2.1">
		<config>
			<bufsize>0</bufsize> 
			<debug level="2"/>
			<nocleanup>0</nocleanup>
			<reread>1</reread>
		</config>
		....
		<category name="mycat" priority="debug" appender="stdout" />
		<appender name="stdout" type="stream" layout="basic"/>
		<layout name="basic" type="basic"/>
</log4c>

从log4crc中也可以看到Category, Appender, Layout三者之间的关系,一个Category需要为其指定一个appender, 一个appender亦要为其指定一个layout。
Log4c中已经提供了几种默认类型的appender和layout。

appender一般是不需要自己来扩展了,我觉得够用了,一般也就是file, stdout, stderr这几个,而这几种类型Log4c都提供了。

layout我倒是认为有必要扩展一下,Log4c提供的几种默认layout类型信息不够丰富,有时候恐怕无法满足需要。譬如,默认的Layout类型中没有提供能够记录Log事件发生
位置(如文件,行,函数)的格式。所以,如果需要的话就自己定义个格式好了,还是很简单的,我会根据自己的需要和喜好来定义自己的格式。

另外,看这样一条日志记录语句
log4c_category_log(mycat, LOG4C_PRIORITY_DEBUG, “Hello World!”);
是不是有点长了呢,每次都敲这么长一串实在是很麻烦,比起log4cpp或者log4cxx相对就简短一些。
首先因为log4c是纯c的东西,就不能以面向对象的方式来调用,在他的log函数中必须指定一个category为参数。
然后才是log level参数, log4c中为log level定义的枚举类型也够长的,像 LOG4C_PRIORITY_DEBUG,LOG4C_PRIORITY_ERROR等,输起来很麻烦。
最后才是你要输出的message.

代码库中进行链接使用

将库和头文件放置到代码工程中

在编译和链接时需要用到 log4c 的头文件和共享库文件,所以只需要将这部分的文件内容包含到代码工程中,这里在工程中专门创建了目录 third/log4c/ 来存放对应的文件,如下图所示:

在这里插入图片描述

修改对应的 CMAKE 配置文件

如果代码工程使用 cmake 进行构建,则需要在 CMakeLists.txt 文件中添加库的连接和使用,具体如下:

# log4c
set(3RDLIB_PATH ${PROJECT_SOURCE_DIR}/third/log4c)
list(APPEND 3RD_LIBS_INCLUDE ${3RDLIB_PATH}/include)
list(APPEND 3RD_LIBS_INCLUDE ${3RDLIB_PATH}/include/log4c)
link_directories(${3RDLIB_PATH}/lib)
link_libraries(log4c)

...

#添加头文件引用路径
target_include_directories(opcodetester PUBLIC
                           ${PROJECT_BINARY_DIR}
                           ${EXTRA_INCLUDE}
                           ${3RD_LIBS_INCLUDE}
												)

代码添加

这里必须说明,如果采用之前的配置文件的方式,可能在构建工程时还需要对这部分配置文件进行处理,所以可以使用代码在程序中自定义日志所需要的数据结构对象而不需要使用配置文件。

//创建日志输出对象
mylog = log4c_category_get("OpcodeLog");
//创建输出目标数据对象,这里 stdout 指的是终端窗口,可以自定义其他字符串则会在当前路径下创建日志文件
out = log4c_appender_get("stdout");
//指定日志输出目标到对象中
log4c_category_set_appender(mylog, out);

//使用方式
log4c_category_log(mylog, LOG4C_PRIORITY_DEBUG, "helloworld");

参考链接及文献

log4c官方链接

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: zip是一种常见的文件压缩格式,而zip则是一种用于操作zip文件的开源使用zip可以方便地创建、读取和修改zip文件。 首先,我们可以使用zip来创建zip文件。通过将要被压缩的文件或目录添加到zip的对象中,我们可以将它们压缩到一个zip文件中。这样可以将一组相关的文件打包成一个文件,便于传输和存储。 其次,我们可以使用zip来读取zip文件。zip提供了读取zip文件中文件信息的功能,比如文件名、大小、压缩比率等等。通过读取zip文件的信息,我们可以了解文件的内容和结构,从而根据需要进行进一步的操作。 另外,我们还可以使用zip来修改zip文件。比如,我们可以通过zip向一个已存在的zip文件中添加、删除或更新文件。这样可以对zip文件进行定制,以满足实际的需求。 总的来说,使用zip可以方便地操作zip文件,实现文件的压缩和解压缩,以及对已存在的zip文件进行修改。这在很多场景下都是非常有用的,比如文件传输、数据备份、软件更新等。 ### 回答2: c 是一种编程语言,开发者可以使用开源zip来处理压缩文件。zip是一个流行的开源,提供了一系列可以用来创建、读取和操作zip格式文件的功能。 使用zip首先需要导入相关的文件。然后,可以使用中的函数来创建一个zip文件,将文件添加到压缩文件中,或者从压缩文件中提取文件等操作。 例如,使用zip可以轻松地创建一个包含多个文件的压缩文件。可以使用中的函数打开一个新的zip文件,然后通过循环遍历文件列表,将每个文件添加到压缩文件中。 另外,zip也提供了读取和提取zip文件的功能。可以使用中的函数来打开已有的zip文件,遍历压缩文件中的所有文件,并将它们提取到指定的目录中。 使用zip还可以进行一些其他的操作,如修改压缩文件中的文件,删除文件,设置压缩文件的密码等。zip提供了简洁易用的接口,使得处理压缩文件变得更加方便。 总而言之,c 使用zip开源可以方便地处理压缩文件。无论是创建、读取、提取还是修改压缩文件,zip都提供了丰富的功能和简洁的接口,使得处理压缩文件变得轻松而高效。 ### 回答3: zip是一种常用的文件压缩格式,而zip则是一种可以用来处理zip文件的开源使用zip可以实现对zip文件的解压缩和压缩操作。 对于解压缩操作,可以使用zip提供的函数读取zip文件并提取其中的文件或文件夹,然后将其解压到指定的目录中。这样可以方便地从zip文件中获取需要的文件或数据。 而对于压缩操作,可以使用zip提供的函数将指定的文件或文件夹打包成zip文件。这个过程可以选择性地对文件进行压缩、设定密码以及设置其他的压缩选项。 使用zip开源的好处在于它可以帮助我们简化处理zip文件的过程。相较于手动编写处理zip文件的代码,使用zip可以提供更高效、更简洁的处理方法。同时,由于zip开源的,我们也可以在遇到问题时查看的源码,从而更好地理解和解决问题。 总结来说,使用zip开源可以方便地实现对zip文件的解压缩和压缩操作,提高处理效率和简化代码编写,并且具有开源的优点,使得我们更好地利用和学习这个

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值