概述

  • 本文演示环境: win10 + vs2017
  • 日志,我用的很少,通常是用作动态库调试使用。
  • 日志记录下来,基本就没看过,除非模块出现了问题。
  • 使用cmake管理的项目
  • 使用C++封装了C语言读写文件实现了的记录日志,
  • 避免使用c++流,因为效率低。
  • 默认是写文本文件,其他格式? 以后再开放接口吧
  • 因为是纯C++ 配合C语言,可以通过绝大部分编译器编译。已经通过 clang++ + msvc 编译。

更新日志:

05-16-2021
1.修复写十六进制时只有一位的情况。(格式化字符串多了一个空格) 05-04-2021
1. init_函数中 增加日志文件存放路径创建返回值检查,如果存放日志文件路径创建失败,则无法写入日志。
2. init_函数完善注释说明

项目下载

可以再 gitee 下载

日志文件接口

使用很简单:1 初始化,2,写日志,3.释放。

	/// ----------------------------------------------------------------------------------------
/// 日志文件接口类
/// ----------------------------------------------------------------------------------------
class ilog
{
public:
/// --------------------------------------------------------------------------------
/// 初始化,
/// @info - 日志信息
/// @return - int
/// 0 - 成功
/// 1 - 失败,日志文件路径不正确
/// 2 - 失败,如果磁盘空间剩余不够,则禁止创建日志文件对象
/// 3 - 失败,无法创建日志文件路径, 无法写入日志
/// 5 - 失败,创建日志文件失败,则无法写入日志
/// --------------------------------------------------------------------------------
virtual int init_(const oct_toolkits::st_log_info& info) = 0; /// --------------------------------------------------------------------------------
/// 写日志,日志内容为文本,且每一行前面都带有时间; 例如: [2021-03-28 15:00:00:001] 日志文件内容
/// @str_log - 待写入日志文件内容
/// @return - int
/// 0 - 成功
/// 1 - 无法写入日志,可能是日志文件创建失败,或者磁盘剩余空间不足5G
/// 2 - 失败,无法创建写日志文件对象,请先初始化
/// --------------------------------------------------------------------------------
virtual int log_text_(const std::string& str_log) = 0; /// --------------------------------------------------------------------------------
/// 写日志
/// @pdata - 待写入内容
/// @pdata_len - 待写入长度
/// @return - int
/// 0 - 成功、
/// 1 - 失败,参数【pdata】为空或者参数【pdata_len】为0
/// 2 - 失败,无法写入日志,可能是日志文件创建失败,或者磁盘剩余空间不足5G
/// 3 - 失败,无法写入,日志文件读写对象创建失败,请先初始化
/// --------------------------------------------------------------------------------
virtual int log_text_(const char* pdata, unsigned int pdata_len) = 0; /// --------------------------------------------------------------------------------
/// 将参数【str_log】每个字节的16进制写入文件,全部大写
/// @str_log - 待写入内容
/// @return - int
/// 0 - 成功
/// 1 - 无法写入日志,可能是日志文件创建失败,或者磁盘剩余空间不足5G
/// 2 - 失败,无法写入,日志文件读写对象创建失败,请先初始化
/// --------------------------------------------------------------------------------
virtual int log_hex_(const std::string& str_log) = 0; /// --------------------------------------------------------------------------------
/// 将参数【pdata】每个字节的16进制写入文件,全部大写
/// @pdata - 待写入内容
/// @pdata_len - 写入内容长度
/// @return - int
/// 0 - 成功
/// 1 - 失败,参数【pdata】为空或者参数【pdata_len】为0
/// 2 - 失败,无法写入日志,可能是日志文件创建失败,或者磁盘剩余空间不足5G
/// 3 - 失败,无法写入,日志文件读写对象创建失败,请先初始化
/// --------------------------------------------------------------------------------
virtual int log_hex_(const char* pdata, unsigned int pdata_len) = 0; /// --------------------------------------------------------------------------------
/// 释放内部资源
/// @return - void
///
/// --------------------------------------------------------------------------------
virtual void uninit_() = 0;
};

因为项目需要,需要将数据写文本文件,且将数据写16进制,比如,字符串 "1234567890", 将每个字符的ASCII的十六进制写文件。

完整使用范例

#include <iostream>
#include <oct_toolkits.h>
void call_log_()
{ using namespace oct_toolkits;
using namespace std;
/// 创建文件对象
ilog* plog = create_ilog_();
if (NULL == plog)
{
cout << "call_log, plog = null";
return;
} st_log_info info;
info.path_ = std::string("C:\\game\\file_demo\\log\\send");
info.prefix_ = std::string("C");
info.postfix_ = std::string("fc");
info.type_ = std::string(".log"); int ret = plog->init_(info);
if (0 != ret)
{
cout << "call log, init, ret =" << ret;
} else
{
cout << "call log, init success";
}
/// ---------------------------------------------------------------------------------------- /// 写文本
std::string str_text("1234567890");
plog->log_text_(str_text);
char arr2[] = {"9876543210"};
plog->log_text_(arr2, 10); /// 写十六进制
plog->log_hex_(str_text);
plog->log_hex_(arr2, 10); plog = release_ilog_(plog); } int main(int argc, char* argv[], char* env[])
{ //call_file();
call_log_(); //system("pause");
return 0;
}

日志文件内容

c++之一个方便的日志库的更多相关文章

  1. 爆料喽!!!开源日志库Logger的剖析分析

    导读 Logger类提供了多种方法来处理日志活动.上一篇介绍了开源日志库Logger的使用,今天我主要来分析Logger实现的原理. 库的整体架构图 详细剖析 我们从使用的角度来对Logger库抽茧剥 ...

  2. 爆料喽!!!开源日志库Logger的使用秘籍

    日志对于开发来说是非常重要的,不管是调试数据查看.bug问题追踪定位.数据信息收集统计,日常工作运行维护等等,都大量的使用到.今天介绍著名开源日志库Logger的使用,库的地址:https://git ...

  3. 新写的c++日志库:log4K

    网是开源的c/c++日志库也不少,但用起来总觉得不方便,于是动手写了一个C++日志框架Log4K. 测试代码: #include "log4k.h" #pragma comment ...

  4. 开源日志库log4cplus+VS2008使用

    一.简介     log4cplus是C++编写的开源的日志系统,功能非常全面.本文介绍如何在Windows+VS2008中使用该日志库.   二.下载     可从网站[url]http://log ...

  5. 这可能是php世界中最好的日志库——monolog

    由于一些历史原因,php中并没有内建的日志接口,故长期以来也没一个功能完备并且应用广泛的日志库.在我的工作生涯中,如果系统需要记录一些应用日志的话,基本上就是封装一个日志类,然后把一些要记录的字段写入 ...

  6. C++线程安全日志库-Win32接口实现

    分享一个C++日志库,使用Win32接口编写,而且是线程安全的日志库.比较简单,只有2个文件,容易上手,使用起来也很简单 头文件 如下是日志库的头文件,接口看似很多,但是使用起来最常用的也就那么几个 ...

  7. 日志服务Python消费组实战(三):实时跨域监测多日志库数据

    解决问题 使用日志服务进行数据处理与传递的过程中,你是否遇到如下监测场景不能很好的解决: 特定数据上传到日志服务中需要检查数据内的异常情况,而没有现成监控工具? 需要检索数据里面的关键字,但数据没有建 ...

  8. glog日志库使用笔记

    日志能方便地诊断程序原因.统计程序运行数据,是大型软件系统必不可少的组件之一.glog 是google的开源日志系统,相比较log4系列的日志系统,它更加轻巧灵活. 在Github上下载glog,解压 ...

  9. easylog -- Linux 下的简单日志库

    之前使用 log4c 或者 log4cpp 的时候, 总需要配置一些文件和链接库之类复杂的配置. 虽然越复杂越说明这个软件支持的功能多.可选择性强, 但是对于一个小的项目,或者要研究他人的代码而加点儿 ...

  10. C/C++log日志库比较

    事实上,在C的世界里面没有特别好的日志函数库(就像Java里面的的log4j,或者C++的log4cxx).C程序员都喜欢用自己的轮子.printf就是个挺好的轮子,但没办法通过配置改变日志的格式或者 ...

随机推荐

  1. 【豆科基因组】木豆Pigeonpea (Cajanus cajan) 292个自然群体重测序2017NG

    目录 一.来源 二.结果 一.来源 Whole-genome resequencing of 292 pigeonpea accessions identifies genomic regions a ...

  2. nginx_access_log的格式设置

    log_format <NAME> <Strin­­­g>; 关键字 格式标签 日志格式 关键字:其中关键字error_log不能改变 格式标签:格式标签是给一套日志格式设置一 ...

  3. GATK4.1 call SNP

    GATK4.0 和之前的版本相比还是有较大的不同,更加趋于流程化. 软件安装 1 wget https://github.com/broadinstitute/gatk/releases/downlo ...

  4. window修改dns本地文件

    文件地址: C:\Windows\System32\drivers\etc 先修改权限: 最后用记事本打开编辑保存即可

  5. Linux实现批量添加用户及随机密码小脚本

    通过chpasswd命令可实现迅速为用户批量设置密码     实例:写一个脚本,实现批量添加20个用户user1-20,密码为用户名和后面跟5个随机字符 #!/bin/sh # 思路:通过for循环, ...

  6. applogs流量数据项目学习

    一. 项目介绍 项目的功能主要是面向App开发商提供App使用情况的统计服务 主要是基于用户启动app的统计分析,app只要启动就会上报一条日志记录 (启动日志),当然也会有其他的日志比如说页面访问日 ...

  7. E面波导和H面波导的问题

    我感觉与窄壁平行是E面,反之为H面.通常E面(窄面)是指与电场方向平行的方向图切面(窄面):H面(宽面)是指与磁场方向平行的方向图切面(宽面).E面的意思是... ElevationH面的意思是... ...

  8. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(八)-认识内存管理

    [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 [STM3 ...

  9. 【Android】修改快捷键,前一步默认是Ctrl + Z,修改后一步

    我已经忘了,我什么时候已经习惯前一步是Ctrl + Z,后一步是Ctrl + Y Android Studio默认前一步快捷键是相同的,但是后一步就不是了 Ctrl + Y变成删除一行代码,就是下图D ...

  10. Gradle—Android配置详解

    参考[1]彻底弄明白Gradle相关配置       [2]Android Studio gradle配置详解