代码拉取完成,页面将自动刷新
Log是一个简易的,基于C++20(环境至少为C++17)的日志系统。目前可以将日志输出到控制台和文件中。
主要功能在Logger
类中,想要了解详细情况可以此类为切入点。
日志系统把日志分为五个等级,如下:
//日志类型
enum class LogLevel {
Debug = 0,
Info,
Warning,
Error,
Fatal
};
同时,有两种输出方式:
//输出方式
enum class Output {
Console = 0,
File
};
日志对象保证全局唯一,可以通过Logger::getInstance()
方法获取该对象并使用。目前用于输出日志的方法只有一个:
virtual void asyncLog(std::string_view content, LogLevel level = LogLevel::Debug,
Output out = Output::Console, std::string_view path = "./Log/");
其中content
是日志内容,level
是日志等级,out
是输出方式,path
是输出路径。当向控制台输出时,后两个参数可以省略;
当向文件输出时,第三个参数必须修改,第四个可以使用默认路径,也可以修改。
因为向控制台或者向文件输出时,方法的实现有很大不同,这里为了以后扩展,因此使用策略模式。通过将asyncLog(输出)行为抽象出来并由子类 实现两种不同的输出(具体见代码)。
这样,Logger
类只需要存有一个Write
类的指针,就可以根据不同的输出方式,保存不同的实例来实现不同的输出:
//策略模式,实现算法替换
std::unique_ptr<Write> writeBehavior;
Logger::getIntance().write("Debug3 of asyncLog to Console");
Logger::getIntance().write("Debug3 of asyncLog to file", Logger::LogLevel::Debug, Logger::Output::File,"./Logs/");
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。