0


【C++】开源:跨平台轻量日志库easyloggingpp

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍跨平台轻量日志库easyloggingpp。
无专精则不能成,无涉猎则不能通。。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

😏1. 项目介绍

项目Github地址:

https://github.com/abumq/easyloggingpp

Easylogging++ 是一个轻量级、高性能的 C++ 日志库,旨在提供简单易用的日志记录功能。以下是 Easylogging++ 的一些特点和功能:

1.简单易用:Easylogging++ 提供了简洁的 API,使得添加日志记录功能变得非常容易。只需包含头文件并使用简单的宏即可进行日志记录,无需复杂的配置和初始化过程。

2.高性能:Easylogging++ 被设计为高性能的日志库,对于频繁的日志记录操作也有很好的性能表现。它采用了异步日志记录机制,将日志写入缓冲区,并在适当的时机进行批量写入,以提高性能。

3.灵活的日志配置:Easylogging++ 具有灵活的日志配置选项,可以根据需求进行自定义。你可以定义不同的日志级别,选择日志记录的目标(文件、终端等),设置日志格式等。可以通过配置文件或代码进行配置。

4.多线程支持:Easylogging++ 对多线程环境有良好的支持。它使用线程安全的方式处理日志记录,确保在多线程环境下的正确性和一致性。

5.跨平台:Easylogging++ 可以在多个平台上运行,包括 Windows、Linux、Mac等。它不依赖于任何特定的操作系统功能,具有很好的可移植性。

6.支持附加数据:除了记录文本日志消息外,Easylogging++ 还允许你附加其他数据,如时间戳、线程ID等,以便更详细地追踪和分析日志。

7.丰富的功能:Easylogging++ 提供了许多额外的功能,如日志滚动(按时间或文件大小自动分割日志文件)、日志过滤、标签支持等,以满足不同场景下的需求。

😊2. 安装运行

easyloggingpp日志库只需要在项目中包含头文件

easylogging++.h

和实现

easylogging++.cc

,即可实现丰富的日志打印功能。

最简日志打印示例:

#include"easylogging++.h"

INITIALIZE_EASYLOGGINGPP    // 初始化宏,有且只能使用一次intmain(int argc,char* argv[]){LOG(INFO)<<"My first info log using default logger";return0;}

我们知道,简单的日志打印有

Fatal Error Warn Info Debug

5种等级,easylogging支持对日志等级和格式进行配置化,通常可通过配置文件进行管理,一个配置示例如下:

* GLOBAL:
   FORMAT               ="%datetime %msg"
   FILENAME             ="/tmp/logs/my.log"
   ENABLED              =true
   TO_FILE              =true
   TO_STANDARD_OUTPUT   =true
   SUBSECOND_PRECISION  =6
   PERFORMANCE_TRACKING =true
   MAX_LOG_FILE_SIZE    =2097152## 2MB - Comment starts with two hashes (##)
   LOG_FLUSH_THRESHOLD  =100## Flush after every 100 logs
* DEBUG:
   FORMAT               ="%datetime{%d/%M} %func %msg"

另外,除了正常的日志输出外,还提供了条件写日志,每执行n次写日志,写n次日志等功能。但一般最常用的就是

LOG(LEVEL)

输出对应等级的日志。

示例如下:

# 简单打印
LOG(INFO)<<"Here is very simple example.";# 条件日志
LOG_IF(1==1, INFO)<<"1 is equal to 1";# 偶然日志(配合for循环)# 每n次记录一次
LOG_EVERY_N(20, INFO)<<"LOG_EVERY_N i = ";# 当计数达到n次之后,才开始记录日志 
LOG_AFTER_N(6, INFO)<<"LOG_AFTER_N i = ";# 当记录次数达到n次之后,就不再记录 
LOG_N_TIMES(1, INFO)<<"LOG_N_TIMES i = ";

该项目也在

sample

目录内提供了多平台、多环境的应用示例,可参考。

😆3. 源码分析

源码也就是.h和.cc两个文件,一个单头文件的库。

easylogging++.h

// 首先是很多平台、编译器的预判断,可以理解为一些开关// 然后引用相关头文件// 预先声明namespace和class// Forward declarationsnamespace el {classLogger;classLogMessage;classPerformanceTrackingData;classLoggers;classHelpers;template<typenameT>classCallback;classLogDispatchCallback;classPerformanceTrackingCallback;classLoggerRegistrationCallback;classLogDispatchData;namespace base {classStorage;classRegisteredLoggers;classPerformanceTracker;classMessageBuilder;classWriter;classPErrorWriter;classLogDispatcher;classDefaultLogBuilder;classDefaultLogDispatchCallback;#ifELPP_ASYNC_LOGGINGclassAsyncLogDispatchCallback;classAsyncDispatchWorker;#endif// ELPP_ASYNC_LOGGINGclassDefaultPerformanceTrackingCallback;}// namespace base}// namespace el

easylogging++.cc

// 默认的日志保存路径//---------------- DEFAULT LOG FILE -----------------------#ifdefined(ELPP_NO_DEFAULT_LOG_FILE)#ifELPP_OS_UNIXstaticconstchar* kDefaultLogFile                         ="/dev/null";#elifELPP_OS_WINDOWSstaticconstchar* kDefaultLogFile                         ="nul";#endif// ELPP_OS_UNIX#elifdefined(ELPP_DEFAULT_LOG_FILE)staticconstchar* kDefaultLogFile                         =      ELPP_DEFAULT_LOG_FILE;#elsestaticconstchar* kDefaultLogFile                         ="myeasylog.log";#endif// defined(ELPP_NO_DEFAULT_LOG_FILE)#if!defined(ELPP_DISABLE_LOG_FILE_FROM_ARG)staticconstchar* kDefaultLogFileParam                    ="--default-log-file";#endif// !defined(ELPP_DISABLE_LOG_FILE_FROM_ARG)#ifdefined(ELPP_LOGGING_FLAGS_FROM_ARG)staticconstchar* kLoggingFlagsParam                      ="--logging-flags";#endif// defined(ELPP_LOGGING_FLAGS_FROM_ARG)staticconstchar* kValidLoggerIdSymbols                   ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._";staticconstchar* kConfigurationComment                   ="##";staticconstchar* kConfigurationLevel                     ="*";staticconstchar* kConfigurationLoggerId                  ="--";}

在这里插入图片描述

以上。

标签: c++ 开源 开发语言

本文转载自: https://blog.csdn.net/qq_40344790/article/details/131794039
版权归原作者 Frank学习路上 所有, 如有侵权,请联系我们删除。

“【C++】开源:跨平台轻量日志库easyloggingpp”的评论:

还没有评论