概述

  • 本文演示环境: 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. R包xlsx安装与使用

     1. Rstudio安装xlsx报错 xlsx包加载依赖Java环境,我之前就安装过Java,但安装xlsx成功后,加载xlsx时一直报错: Error : loadNamespace()里算'rJ ...

  2. 45-Letter Combinations of a Phone Number

    Letter Combinations of a Phone Number My Submissions QuestionEditorial Solution Total Accepted: 7855 ...

  3. Java、Scala获取Class实例

    Java获取Class实例的四种方式 package com.test; /** * @description: TODO * @author: HaoWu * @create: 2020/7/22 ...

  4. 大数据学习day11------hbase_day01----1. zk的监控机制,2动态感知服务上下线案例 3.HDFS-HA的高可用基本的工作原理 4. HDFS-HA的配置详解 5. HBASE(简介,安装,shell客户端,java客户端)

    1. ZK的监控机制 1.1 监听数据的变化  (1)监听一次 public class ChangeDataWacher { public static void main(String[] arg ...

  5. CPU 是如何认识和执行代码的

    CPU的介绍 CPU 也称为微处理器,是计算机的心脏和/或大脑. 深入研究计算机的核心,可以帮助我们有效地编写计算机程序. CPU 是计算机的心脏和大脑,它执行提供给他们的指令.它的主要工作是执行算术 ...

  6. html5 绘图

    SVG 在 SVG 中,每个元素是图型与数据相结合的一个对象. 修改对象属性的值,图型会立即体现出这种变化. 因为是对象,所以支持事件处理. D3使用的是SVG Canvas 不支持事件处理. cha ...

  7. spring boot springMVC扩展配置 。WebMvcConfigurer ,WebMvcConfigurerAdapter

    摘要: 在spring boot中 MVC这部分也有默认自动配置,也就是说我们不用做任何配置,那么也是OK的,这个配置类就是 WebMvcAutoConfiguration,但是也时候我们想设置自己的 ...

  8. Spring Boot对静态资源的映射规则

    规则一:所有 " /webjars/** " 请求都去classpath:/META-INF/resources/webjars/找资源 webjars:以jar包的方式引入静态资 ...

  9. 带你了解 Angular 与 Angular JS

    Angular 是一个基于 TypeScript 的开源客户端框架,专为构建 Web 应用程序而设计. 另一方面,AngularJS 是 Angular 的第一个版本,用纯 JavaScript 编写 ...

  10. Redis5.0.8 Cluster集群部署

    目录 一.Redis Cluster简介 二.部署 三.创建主库 一.Redis Cluster简介 Redis Cluster集群是一种去中心化的高可用服务,其内置的sentinel功能可以提供高可 ...