我们把Logger
设计为一个单例类,通过下面的静态成员函数获取该类唯一的对象:
Logger& Logger::Instance() {
static Logger log;
return log;
}
接下来,需要通过获取的对象来对底层的spdlog::logger
进行初始化(名称、日志文件路径、日志等级):
bool Logger::init(const std::string& loggerName,
const std::string& filePath,
spdlog::level::level_enum level)
-
- 您可以通过
LOGGER()
宏来设置一个默认的全局logger:
- 您可以通过
#include "burger/base/Log.h"
using namespace burger;
int main(void) {
LOGGER();
/* 该宏等价于:
Logger::Instance().init("Logger", "logs/log.txt", spdlog::level::info)
*/
}
-
- 如果想设置自己需要的名字和日志文件路径,可以传入参数
LOGGER(path, name)
:
- 如果想设置自己需要的名字和日志文件路径,可以传入参数
#include "burger/base/Log.h"
using namespace burger;
int main(void) {
LOGGER(path);
/* 该宏等价于:
Logger::Instance().init(path, "Logger", spdlog::level::info)
*/
Logger::shutdown();
LOGGER(path, name);
/* 该宏等价于:
Logger::Instance().init(path, name, spdlog::level::info)
*/
}
-
- 如果只想改变名称(暂时这很少见),也可以使用
LOGGER_WITH_NAME(name)
来进行设置。
- 如果只想改变名称(暂时这很少见),也可以使用
- 日志分为六个等级:
{ TRACE, DEBUG, INFO, WARN, ERROR, CRITICAL }
其中,记录CRITICAL
等级的日志会导致程序ABORT
!
- 如果需要设置日志等级,可以使用下列宏:
// 修改日志等级
LOG_LEVEL_DEBUG;
LOG_LEVEL_INFO;
......
Burger
的Logger
可以方便地记录日志信息:
TRACE("TRACE");
DEBUG("DEBUG");
INFO("INFO");
WARN("WARN");
DEBUG("DEBUG");
CRITICAL("CRITICAL");
但是只有等级大于等于当前日志等级的信息会被记录(例如等级为DEBUG试,这里的TRACE信息就不会被输出)!
- 如果需要格式化输出,只需要在您需要变量出现的位置,使用
{}
代替即可:
INFO("Now is {} and my name is {}", Timestamp::now().toFormatTime(), name);