LWlogc轻量级日志记录框架库

文章目录

  • 1. LWlogc简介
    • 1.1 LWlogc特性
      • 1.1 lwlog.properties 配置文件
        • 1.1.1 lwlog.File
        • 1.1.2 lwlog.MaxBackupIndex
        • 1.1.3 lwlog.MaxFileSize
        • 1.1.4 lwlog.Threshold
  • 2. LWlogc代码架构
    • 2.1 LWlogc日志记录库文件目录结构图
    • 2.2 LWlogc服务启动流程
    • 2.3 使用LWlogc
    • 2.4 LWlogc内存、cpu占用
      • 2.4.1 LWLogc使用效果
      • 2.4.2 LWlogc打印
  • 3. LWlogc依赖库
  • 4. LWlogc位于gitbuh具体位置
  • 5. LWlogc待完成任务

1. LWlogc简介

     LWlogc是一款基于纯C开发的轻量级日志(log)记录框架。主要由两个文件组成,分别是:LWlogc.c和LWlogc.h;代码总行数在千行左右,非常轻量和简洁, API通俗易懂。LWlogc日志记录框架能非常友好地嵌入到任何你所要开发的项目中,它具有良好的移植性;并且它占用的资源(包括但不限于内存、磁盘空间、CPU等)非常之低。LWlogc具有高稳定性、强可靠性、可扩展性等特点。

1.1 LWlogc特性

1.1 lwlog.properties 配置文件

     LWlogc进程启动时候,会先读取该进程目录下的lwlog.properties配置文件,配置文件中各参数的配置正确与否对该日志记录服务能否正常工作起到了决定性的作用。因此,下面先对该配置文件中的参数作一介绍。

     以下是该配置文件中的所有参数:

# (1) log文件路径
lwlog.File = /data1/lixiaogang5/work/OpenSource/LWlogc/test/lxg.log

# (2) log文件数量(保留磁盘log文件)
lwlog.MaxBackupIndex = 66

# (3) 每个log文件大小,(单位MB)
lwlog.MaxFileSize = 1024

# (4) log文件追加(暂时不使用)
lwlog.Append = TRUE

# (5) log打印等级(ERROR、WARN、INFO、DEBUG)
lwlog.Threshold = ERROR

# (6) log文件名模式(暂时不使用)
lwlog.ConversionPattern = %Y-%M-%D

1.1.1 lwlog.File

     该参数指定log文件存储于磁盘上面的具体位置。如:
     /data1/lixiaogang5/work/OpenSource/LWlogc/test/hik.log
     值得注意的是, log文件名(lxg.log)前面的目录部分需保证是已存在的,若不存在,LWlogc日志记录库初始化时候会报错提示目录不存在;并在失败时候将日志打印默认输出到终端(标准输出)。 log文件不存在, LWlogc会自动创建,比如第一次启动你的服务时候,目录下面肯定是不存在log文件的,此时LWlogc日志记录库会检测,是否需要创建。

     (1) 若用户指定目录下, 没有log文件, 则创建第一个log文件,命名为: 用户指定log名字.log。如上例中的: hik.log。

     (2) 若用户指定目录下, 存在log文件,则读取最新的一个log文件名以及序号(即上次进程关闭时候在写的log文件);若该文件大小已经超过用户指定的大小(1.1.3中MaxFileSize),则创建一个新的log文件,且该文件名叫上一个log文件名序号递增(比如上一个log文件名是: hik.log10, 那么本次创建的log文件名是: hik.log11)。如果此时目录下log文件数量已经超过了用户指定的数量(1.1.2节MaxBackupIndex),则删除最早的log文件。

     (3) lwlog.File配置,因考虑到实际情况,暂不支持动态修改。
     

1.1.2 lwlog.MaxBackupIndex

     MaxBackupIndex参数指明用户希望保存在指定目录下的log文件数量。当log文件数量超过该限制之后,会删除最早(最旧)的一个log文件。该参数支持动态修改。即第一次指定10个,然后立刻修改为20个,是立刻生效的。即LWlogc日志记录库会统计,满足20个之后才删除最早文件。
     

1.1.3 lwlog.MaxFileSize

     MaxFileSize参数指定每个log文件的大小。该参数默认单位是MB。 因此在统计日志磁盘空间是否充裕时候,你的计算方式是这样的:

     需要磁盘空间 = MaxBackupIndex(文件数量) * MaxFileSize(每个文件大小)

     MaxFileSize是支持动态修改的,且立刻生效。
     

1.1.4 lwlog.Threshold

     Threshold参数用于限制或是控制log文件的打印等级。当前LWlogc日志记录库框架支持四种打印级别,分别是:ERROR、WARN、INFO和DEBUG(值从低到高)。 若不想DEBUG的日志信息打印并输出到log文件中,那么该参数可以设置为INFO, 这样高于INFO级别的所有日志都不会被打印;同理,若不想输出INFO级别的日志打印,则该参数填写为WARN,依次类推。如果因业务需求,当前四种打印等级不满足实际情况,也可以代码中增加,比如TRACE、FATAL等,也是非常方便的,它具有良好的可拓展性。

     同理,该参数是支持动态修改的。并且在配置文件中,其值不关心大小写,即INFO等价于info/Info/iNFO等。

2. LWlogc代码架构

2.1 LWlogc日志记录库文件目录结构图

     在第1节中提高过LWlogc日志记录框架库非常轻量,仅两个文件。下图是LWlogc项目的文件目录结构图。

LWlogc轻量级日志记录框架库_第1张图片

     该图详细的说明了LWlogc日志库中各文件的分布以及其功能。这也是你Download该目录之后的文件结构布局图。
     

2.2 LWlogc服务启动流程

     对于LWlogc日志记录框架库,其服务的启动流程逻辑结构图如下所示。该图较为详细的阐述了服务启动的细节和核心。以及对于各环节的出错处理。阅读源码时候,结合本图,会更加高效。

LWlogc轻量级日志记录框架库_第2张图片

2.3 使用LWlogc

     若将该LWlogc应用于你项目中,可以有两种方式:
     方式一: 直接将LWlogc.c和LWlogc.h两个文件嵌入到你的项目中,然后使用.h文件中定义的四个宏。LWLOGC_ERROR、LWLOGC_WARN、LWLOGC_INFO、LWLOGC_DEBUG。当然你可也完全可以根据实际项目所要对其进行宏重新定义。

     方式二: 使用LWlog.*同级目录下的Makefile编译出LWlogc日志记录库的动态库 libLWlogc.so, 然后将该动态库放在你的项目中,编译成果物物时候链接进去。对于该方式的具体使用可以参考同级目录test/下的main.c测试文件的所有。

2.4 LWlogc内存、cpu占用

     测试环境(VMware虚拟机环境)

     (1) 系统平台: VMware Virtual Platform
     (2) CPU: Intel® Core™ i7-6500U CPU @ 2.50GHz
     (3) 内存: MemTotal: 2006924 kB(2GB)
     (4) 操作系统版本: Ubuntu 20.04
     (5) 磁盘型号: HDD(机械硬盘) 20GB

     该数据使用test/目录下的main.c文件中的数据测试所得,但是条件修改了,死循永不停息地重复打印日志、写磁盘、读磁盘、删log文件、创建新log文件等等。因此对CPU的占用稍微偏高,这是在压测环境下所的的数据,仅供参考。

LWlogc轻量级日志记录框架库_第3张图片

2.4.1 LWLogc使用效果

     当前lwlog.properties配置文件其中几个配置的参数如下所示:

     即log文件名是hik.logxx; 每个log文件大小是800MB,保留的文件数量3个。当文件数量超过3个时候,会删除最早的log文件(hik.log50), 然后新建log文件(hik.log52)。

# log文件路径
lwlog.File = /home/lixiaogang5/Code/LWlogc-master/test/hik.log

# log文件数量
lwlog.MaxBackupIndex = 3

# 每个log文件大小,MB
lwlog.MaxFileSize = 800

LWlogc轻量级日志记录框架库_第4张图片

     节省篇幅,更多的配置结果现象就不一一阐述了。

2.4.2 LWlogc打印

LWlogc轻量级日志记录框架库_第5张图片

3. LWlogc依赖库

     LWlogc当前仅依赖POSIX线程库,即libpthread.so。

4. LWlogc位于gitbuh具体位置

     该日志记录框架库是由我本人利用业余时间单独开发,其具体位置在: LWlogc。 欢迎使用,也非常欢迎大家的更好建议。

5. LWlogc待完成任务

     当前的LWlogc能够很好的应用。但是它还存在着一些局限性。比如一个项目里面,有很多个模块划分;协议处理模块、数据库数据模块、图片存储模块等等。然后希望每个不同模块用不同的log日志文件去分别记录,分门别类,无论是排查问题,还是检索数据,目标都会显得更加清晰、高效。

你可能感兴趣的:(开源项目作品)