??★,°:.☆( ̄▽ ̄)/$:.°★ ??
這篇文章主要介紹跨平臺輕量日志庫easyloggingpp。
無專精則不能成,無涉獵則不能通。?!簡⒊?/font>
歡迎來到我的博客,一起學習,共同進步。
喜歡的朋友可以關注一下,下次更新不迷路??
??1. 項目介紹
項目Github地址:https://github.com/abumq/easyloggingpp
Easylogging++ 是一個輕量級、高性能的 C++ 日志庫,旨在提供簡單易用的日志記錄功能。以下是 Easylogging++ 的一些特點和功能:
1.簡單易用:Easylogging++ 提供了簡潔的 API,使得添加日志記錄功能變得非常容易。只需包含頭文件并使用簡單的宏即可進行日志記錄,無需復雜的配置和初始化過程。
2.高性能:Easylogging++ 被設計為高性能的日志庫,對于頻繁的日志記錄操作也有很好的性能表現(xiàn)。它采用了異步日志記錄機制,將日志寫入緩沖區(qū),并在適當?shù)臅r機進行批量寫入,以提高性能。
3.靈活的日志配置:Easylogging++ 具有靈活的日志配置選項,可以根據(jù)需求進行自定義。你可以定義不同的日志級別,選擇日志記錄的目標(文件、終端等),設置日志格式等??梢酝ㄟ^配置文件或代碼進行配置。
4.多線程支持:Easylogging++ 對多線程環(huán)境有良好的支持。它使用線程安全的方式處理日志記錄,確保在多線程環(huán)境下的正確性和一致性。
5.跨平臺:Easylogging++ 可以在多個平臺上運行,包括 Windows、Linux、Mac等。它不依賴于任何特定的操作系統(tǒng)功能,具有很好的可移植性。
6.支持附加數(shù)據(jù):除了記錄文本日志消息外,Easylogging++ 還允許你附加其他數(shù)據(jù),如時間戳、線程ID等,以便更詳細地追蹤和分析日志。
7.豐富的功能:Easylogging++ 提供了許多額外的功能,如日志滾動(按時間或文件大小自動分割日志文件)、日志過濾、標簽支持等,以滿足不同場景下的需求。
??2. 安裝運行
easyloggingpp日志庫只需要在項目中包含頭文件easylogging++.h
和實現(xiàn)easylogging++.cc
,即可實現(xiàn)豐富的日志打印功能。
最簡日志打印示例:
#include "easylogging++.h"
INITIALIZE_EASYLOGGINGPP // 初始化宏,有且只能使用一次
int main(int argc, char* argv[]) {
LOG(INFO) << "My first info log using default logger";
return 0;
}
我們知道,簡單的日志打印有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"
另外,除了正常的日志輸出外,還提供了條件寫日志,每執(zhí)行n次寫日志,寫n次日志等功能。但一般最常用的就是LOG(LEVEL)
輸出對應等級的日志。
示例如下:
# 簡單打印
LOG(INFO) << "Here is very simple example.";
# 條件日志
LOG_IF(1 == 1, INFO) << "1 is equal to 1";
# 偶然日志(配合for循環(huán))
# 每n次記錄一次
LOG_EVERY_N(20, INFO) << "LOG_EVERY_N i = ";
# 當計數(shù)達到n次之后,才開始記錄日志
LOG_AFTER_N(6, INFO) << "LOG_AFTER_N i = ";
# 當記錄次數(shù)達到n次之后,就不再記錄
LOG_N_TIMES(1, INFO) << "LOG_N_TIMES i = ";
該項目也在sample
目錄內(nèi)提供了多平臺、多環(huán)境的應用示例,可參考。
??3. 源碼分析
源碼也就是.h和.cc兩個文件,一個單頭文件的庫。
easylogging++.h
// 首先是很多平臺、編譯器的預判斷,可以理解為一些開關
// 然后引用相關頭文件
// 預先聲明namespace和class
// Forward declarations
namespace el {
class Logger;
class LogMessage;
class PerformanceTrackingData;
class Loggers;
class Helpers;
template <typename T> class Callback;
class LogDispatchCallback;
class PerformanceTrackingCallback;
class LoggerRegistrationCallback;
class LogDispatchData;
namespace base {
class Storage;
class RegisteredLoggers;
class PerformanceTracker;
class MessageBuilder;
class Writer;
class PErrorWriter;
class LogDispatcher;
class DefaultLogBuilder;
class DefaultLogDispatchCallback;
#if ELPP_ASYNC_LOGGING
class AsyncLogDispatchCallback;
class AsyncDispatchWorker;
#endif // ELPP_ASYNC_LOGGING
class DefaultPerformanceTrackingCallback;
} // namespace base
} // namespace el
easylogging++.cc
// 默認的日志保存路徑
//---------------- DEFAULT LOG FILE -----------------------
#if defined(ELPP_NO_DEFAULT_LOG_FILE)
# if ELPP_OS_UNIX
static const char* kDefaultLogFile = "/dev/null";
# elif ELPP_OS_WINDOWS
static const char* kDefaultLogFile = "nul";
# endif // ELPP_OS_UNIX
#elif defined(ELPP_DEFAULT_LOG_FILE)
static const char* kDefaultLogFile = ELPP_DEFAULT_LOG_FILE;
#else
static const char* kDefaultLogFile = "myeasylog.log";
#endif // defined(ELPP_NO_DEFAULT_LOG_FILE)
#if !defined(ELPP_DISABLE_LOG_FILE_FROM_ARG)
static const char* kDefaultLogFileParam = "--default-log-file";
#endif // !defined(ELPP_DISABLE_LOG_FILE_FROM_ARG)
#if defined(ELPP_LOGGING_FLAGS_FROM_ARG)
static const char* kLoggingFlagsParam = "--logging-flags";
#endif // defined(ELPP_LOGGING_FLAGS_FROM_ARG)
static const char* kValidLoggerIdSymbols =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._";
static const char* kConfigurationComment = "##";
static const char* kConfigurationLevel = "*";
static const char* kConfigurationLoggerId = "--";
}
文章來源:http://www.zghlxwxcb.cn/news/detail-599873.html
以上。文章來源地址http://www.zghlxwxcb.cn/news/detail-599873.html
到了這里,關于【C++】開源:跨平臺輕量日志庫easyloggingpp的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!