muduo日志库的使用
- 一、引用
- 二、使用方法
- 2.1、引入头文件
- 2.2、 启动日志库
- 2.3、记录日志
- 2.4、输出格式
- 2.5、日志滚动
- 三、总结
一、引用
muduo是一个高性能的网络库,它的日志库采用了异步、多线程的方式来记录日志,其主要特点包括:
- 能够按大小和时间自动分裂文件。
- 支持同步和异步日志输出。
- 支持日志级别控制。
- 支持多线程安全。
二、使用方法
下面介绍一下muduo日志库的使用方法。
2.1、引入头文件
#include <muduo/base/Logging.h>
2.2、 启动日志库
在程序入口处调用下面的语句启动日志库:
Logger::setLogLevel(Logger::INFO); // 设置日志级别为INFO
LOG_INFO << "logging started";
2.3、记录日志
通过宏定义LOG_XX来记录日志,其中XX表示不同的日志级别,常见的日志级别有:
- TRACE
- DEBUG
- INFO
- WARN
- ERROR
- FATAL(致命错误)
例如:
LOG_TRACE << "trace message";
LOG_DEBUG << "debug message";
LOG_INFO << "info message";
LOG_WARN << "warning message";
LOG_ERROR << "error message";
LOG_FATAL << "fatal error message";
2.4、输出格式
muduo日志库支持输出格式的自定义,下面是一个简单的例子:
void outputFunc(const char* msg, int len)
{
fwrite(msg, 1, len, stdout);
}
void flushFunc()
{
fflush(stdout);
}
int main(int argc, char* argv[])
{
Logger::setOutput(outputFunc);
Logger::setFlush(flushFunc);
Logger::setLogLevel(Logger::TRACE);
LOG_TRACE << "trace message";
LOG_DEBUG << "debug message";
LOG_INFO << "info message";
LOG_WARN << "warning message";
LOG_ERROR << "error message";
LOG_FATAL << "fatal error message";
}
在上面的例子中,通过Logger::setOutput()和Logger::setFlush()函数分别设置了日志输出函数和刷新函数。默认情况下,muduo会将日志输出到标准错误输出(stderr)。
2.5、日志滚动
muduo日志库支持按文件大小或时间进行日志滚动。下面是一个例子:
#include <muduo/base/LogFile.h>
void outputFunc(const char* msg, int len)
{
g_logFile->append(msg, len);
}
int main(int argc, char* argv[])
{
muduo::LogFile logFile("test_log", 500*1000); // 文件大小为500KB
g_logFile = &logFile;
Logger::setOutput(outputFunc);
Logger::setLogLevel(Logger::TRACE);
LOG_INFO << "logging started";
for (int i = 0; i < 100000; ++i)
{
LOG_INFO << "hello world " << i;
}
}
在上面的例子中,我们通过muduo::LogFile类来实现按文件大小滚动日志。其中,第一个参数表示日志文件名,第二个参数表示文件大小限制(单位为字节)。如果一个日志文件达到了限制大小,就会自动创建一个新的日志文件。
三、总结
muduo日志库是一个高性能、易于使用的日志库,它的异步、多线程特性使得它非常适合在高并发环境下使用。通过上面的介绍,相信已经掌握了muduo日志库的基本使用方法。