概述

  • 本文演示环境: 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. Kruskal 重构树小记

    其实也不是多难的知识点吧--学了一个中午+半个下午就把它学会了(做过那道 jxd 作业 CF571D 的应该比较好理解) Kruskal 重构树大概就是在正常 Kruskal 的时候,对于两个需要连边 ...

  2. Atcoder Grand Contest 034 F - RNG and XOR(FWT)

    Atcoder 题面传送门 & 洛谷题面传送门 tsc 考试前 A 的题了,结果到现在才写这篇题解--为了 2mol 我已经一周没碰键盘了,现在 2mol 结束算是可以短暂的春天 短暂地卷一会 ...

  3. CF1578I Interactive Rays:ICPC WF Moscow Invitational Contest I 题解

    题意简述:在平面上有一个坐标 \((x_c,y_c)\) 和半径 \(r\) 都是整数的圆 \((1\leq r_c\leq \sqrt{x_c^2+y_c^2}-1)\),你可以询问不超过 \(60 ...

  4. CF1553 部分题解

    CF1553D Backspace 题目传送门. 题意简述:给定 \(s,t\),现在要依次输入 \(s\) 中的字符.对于每个字符 \(s_i\),你可以选择输入 \(s_i\) 或者使用退格键,判 ...

  5. Neville 插值方法

    简介 wikipedia: Neville's method 在数学上,Neville 算法是一种计算插值多项式方法,由数学家Eric Harold Neville提出.由给定的n+1个节点,存在一个 ...

  6. 【3】蛋白鉴定软件之Mascot

    目录 1.简介 2.配置 2.1在线版本 2.2 服务器版本 3.运行 3.1 在线版本 3.2 服务器版本 4.结果 1.简介 Mascot是非常经典的蛋白鉴定软件,被Frost & Sul ...

  7. 什么是GP、LP、PE、VC、FOF?

    GP GP是General Partner的缩写,意思是普通合伙人.投资者经常听到的一些基金.风投等投资公司采用的就是普通合伙人的制度,在美国等发达国家,普通合伙人很常见. 其实,说白了,GP最开始指 ...

  8. git创建项目,代码仓库

    1.首先在服务端远程创建仓库 mkdir  project.git cd  project.git git  --bare init 2.在本地创建项目推送到远程服务端仓库 mkdir  myproj ...

  9. Pytorch学习笔记08----优化器算法Optimizer详解(SGD、Adam)

    1.优化器算法简述 首先来看一下梯度下降最常见的三种变形 BGD,SGD,MBGD,这三种形式的区别就是取决于我们用多少数据来计算目标函数的梯度,这样的话自然就涉及到一个 trade-off,即参数更 ...

  10. Vue函数防抖和函数节流

    函数防抖(debounce) 应用场景 登录.发短信等按钮避免用户点击太快,以致于发送了多次请求,需要防抖 调整浏览器窗口大小时,resize 次数过于频繁,造成计算过多,此时需要一次到位,就用到了防 ...