分享⼀个⽇志系统源码(C语⾔)
代码路径:
  这是⼀个简单、⾼效和轻量级C语⾔写的的⽇志系统,linux下不需要第三⽅库安装。⽬前主要是在linux下编写和测试,通⽤分⽀()为⼀个基于Apache的(⼀个C语⾔跨平台的开源库)编写的跨平台版本,由于精⼒有限只基于最简单的⽇志打印功能进⾏了改写,仅供参考。
  ⽇志系统⽀持多线程多句柄、印级别控制、IO缓存设置、备份控制、⽇志⽂件⼤⼩控制、异常退出堆栈打印、加密(AES-128)、压缩(lz4)和散列校验(MD5)。所有配置和接⼝都在log.h内。堆栈打印是接收所有异常退出信号时打印堆栈,输出⽂件名通过TRACE_PRINT_PATH宏控制,在其信号处理时还对所有⽇志句柄进⾏刷新处理,减少⽇志丢失可能。下⾯介绍下接⼝使⽤:
⽇志创建:
  //log_filename:输出⽂件名。
  //max_file_size:每个⽂件最⼤上限。
  //max_file_bak:最⼤备份⽂件数量,备份⽂件名为输出⽂件名末尾+备份序号,如有其它需要可⾃⾏修改。
  //max_iobuf_size:IO缓存⼤⼩,可以设为0⽆缓存。
  //cflag:三个宏选项,NORMALIZE, ENCRYPT, COMPRESS 或者 ENCRYPT|COMPRESS,分别对应正常,只加密/压缩,加密和压缩。
  //password:密码,在cflag有设ENCRYPT时⽣效。
  //返回为⼀个log句柄,可以创建多个,数量最⼤值由MAX_HANDLE_NUM宏控制。
  log_t* log_create(const char *log_filename, size_t max_file_size, size_t max_file_bak, size_t max_iobuf_size, int cflag, const char *password);
刷新和销毁为:
  //刷新是将IO缓存内数据刷新到⽂件内,lh为创建返回的句柄指针。
  void log_flush(log_t *lh);
  void log_destory(log_t *lh);
⽇志打印:
  /*⽇志内容可以是任意类型,由format控制(类似printf函数的format)。⽇志等级设置为四个宏LOG_DEBUG、
LOG_INFO、LOG_WARN和LOG_ERROR(如有需要更多细分可以很⽅便添加扩展),代码中低于此等级的打印不会⽣效,LOG_CLOSE为关闭⽇志功能,所有打印在编译期间过滤不影响效率。LOG_DEBUG会额外输出:时间⽂件名【⾏号】线程号: ***(⽇志内容)。*/
  #define log_debug(lh, format, ...)
  #define log_info(lh, format, ...)
  #define log_warn(lh, format, ...)
  #define log_error(lh, format, ...)
⽇志解密、解压和散列:
  //in_filename:待解密⽂件名,解密完成不删除
  //out_filename:解密后⽂件名
  //password:对应创建log句柄的密码
  //返回0-成功,其他-失败。
  int log_decipher(const char *in_filename, const char *out_filename, const char *password);
  //src_filename:带解压⽂件,解压完不删除
  //dst_filename:解压后⽂件名
  //返回0-成功,其他-失败。解缩内部有校验。
  //注意加密是在每条⽇志写⼊IO缓存前进⾏的,压缩是备份时整个⽂件进⾏压缩的,所以如果同时加密压缩,先解压再解密
免费分享源码大全  int log_uncompress(const char *src_filename, const char *dst_filename);
  //filename:待散列⽂件名
  //digest:输出转化为32个⼗六进制字符,如果digest为NULL,内部会⾃动申请内存,否则其size⾄少应为33(32加尾部'\0')
  //返回:digest
  char* log_md5(const char *filename, char *digest);
  所有具体使⽤有个简单测试例⼦在sample⽂件夹内,直接make就可以⽣成,详细可看代码,内部还有⼀个多线程安全时间计时器可以精确到纳秒,计数器个数可以由TIMEKEEPER_NUM这个宏控制,详细功能可以看。
  最后欢迎提问和反馈问题,不胜感激!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。