C++ muduo日志库的使用

一、引用

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日志库的基本使用方法。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Long_xu/article/details/130439633