日志级别: 分四级-> INFO、WARNING、ERROR、FATAL。
INFO: 表示正常的日志输出,一切按预期运行。
WARNING: 表示警告,该事件不影响服务器运行,但存在风险。
ERROR: 表示发生了某种错误,但该事件不影响服务器继续运行。
FATAL: 表示发生了致命的错误,该事件将导致服务器停止运行。
日志信息: 事件产生的日志信息。
错误发生文件名称: 事件在哪一个文件产生。
错误发生函数名称: 事件在哪一个函数产生。
行数: 事件在对应文件的哪一行产生。
通过C/C++语言中的预定义符号__FILE__和__FUNCTION__和__LINE__,分别可以获取当前文件的名称和当前的行数,但最好在调用Log函数时不用调用者显示的传入__FILE__和__FUNCTION__和__LINE__,因为每次调用Log函数时传入的这三个参数都是固定的。
注意:不能将__FILE__和__FUNCTION__和__LINE__设置为参数的缺省值,因为这样每次获取到的都是Log函数所在的文件名称和所在的行数。而宏可以在预处理期间将代码插入到目标地点,因此我们可以定义如下实现:
#include <iostream>
void Log(std::string level, std::string message, std::string file_name, std::string function, int line)
{
std::cout << "[" << level << "][" << message << "][" << file_name << "][" << function << "][" << line << "]" << std::endl;
}
#define INFO 1
#define WARNING 2
#define ERROR 3
#define FATAL 4
#define LOG(level, message) Log(#level, message, __FILE__, __FUNCTION__, __LINE__)
void Test()
{
LOG(INFO, "This is a test()");
}
int main()
{
Test();
LOG(WARNING, "This is a main()");
getchar();
}