# 1. 日志库   日志库主要辅助调试和测试。 ## 1.1. 基本需求: 1. 日志类型:info / error / warning / trace ;需要打印出运行时间,文件名和行号; 2. 不同日志类型显示不同的颜色; 3. 通过预编译选择开启 / 关闭; 4. 通过多态动态加载 / 卸载; 5. 通过预编译加载 / 卸载某个模块的日志; ## 1.2. 接口描述 1. 开启日志保存功能,把运行日志保存到制定目录; 2. 开启日志保存功能,只保存error和trace的日志; 接口示例: ``` 示例代码 ``` ## 1.3. 参考 * CMakeLists.txt脚本代码: //build/global_config.cmake ``` // 文件名宏定义__F_FILE__,指定文件实现打印文件名 + 行号功能 // 不使用系统宏__FILE__是因为系统宏会打印绝对路径,日志阅读性差 function(define_file_name target) get_target_property(source_files "${target}" SOURCES) foreach(source_file ${source_files}) get_property(defs SOURCE "${source_file}" PROPERTY COMPILE_DEFINITIONS) get_filename_component(file_name "${source_file}" NAME) list(APPEND defs "__F_FILE__=/"${file_name}/"") set_property( SOURCE "${source_file}" PROPERTY COMPILE_DEFINITIONS ${defs}) endforeach() endfunction() // LOG_DISABLE日志使能宏,指定文件开启 / 关闭日志功能 function(log_disable target) get_target_property(source_files "${target}" SOURCES) foreach(source_file ${source_files}) get_property(defs SOURCE "${source_file}" PROPERTY COMPILE_DEFINITIONS) get_filename_component(file_name "${source_file}" NAME) list(APPEND defs "LOG_DISABLE") set_property( SOURCE "${source_file}" PROPERTY COMPILE_DEFINITIONS ${defs}) endforeach() endfunction() ... ``` ## 1.4. 各文件的作用 * **easyloggingpp**:在Log目录下发挥了日志记录、存储、管理的重要作用,为C++项目的开发和维护提供了强有力的支持。 * **lLogMakePtr.h**:提供了一个日志实例创建和管理的机制,可能是作为应用程序中日志系统的一部分。通过使用单例模式和虚函数,它允许在应用程序的不同部分之间共享和交换日志实现,同时保持对日志系统底层实现的抽象。 * **lLogMakePtr.cpp**: 提供了一个日志模块的创建和销毁机制,以及基于不同实现的日志对象的创建方法。 * **Log.h**: 提供了一个C语言兼容的日志接口,允许C或C++代码以统一的方式使用日志功能。 * **Log.cpp**: 提供了一个C兼容的日志接口实现,该实现基于C++的 ILogCpp 类来处理实际的日志记录。它允许C或C++代码使用统一的日志接口,而无需关心底层的日志实现细节。 * **LogEasylogging.h**: 为基于 Easylogging++ 的日志系统提供了一个C++接口实现。通过继承 ILogCpp 接口并实现其中的函数,它使得日志功能的使用者能够以一种统一和标准化的方式记录和管理日志,而无需关心底层的日志实现细节。 * **LogEasylogging.cpp**: 通过实现 LogEasylogging 类,为应用程序提供了一个基于 Easylogging++ 库的日志系统,支持不同级别的日志记录,并允许通过配置文件来定制日志的行为。 * **Loglmpl.h**: 提供了一个用于扩展和实现具体日志功能的基类,同时保持了与 ILogCpp 接口的兼容性。 * **Loglmpl.cpp**: 为空。