21xrx.com
2025-03-30 08:00:46 Sunday
文章检索 我的文章 写文章
使用C++可变参数模板记录日志
2023-07-04 22:36:29 深夜i     40     0
C++ 可变参数模板 记录日志

日志(log)在软件开发中是非常重要的一环,可以用于调试、记录关键信息、跟踪程序运行等等。在C++中,使用可变参数模板可以很方便地实现日志的记录。

可变参数模板是C++11引入的新特性,常用于处理数量不确定的参数。使用可变参数模板,我们可以定义一个类似于printf函数的函数,可以接收不定数目的参数,并将它们打印到控制台或写入日志文件中。

下面是使用可变参数模板实现日志记录的代码:

#include <iostream>
#include <fstream>
// 定义日志级别
enum class LogLevel
  WARNING;
// 实现日志记录器
template<typename... Args>
void log(LogLevel level, const char* format, Args... args)
{
  const char* levelStr = "?";
  switch (level)
  
    case LogLevel::ERROR: levelStr = "ERROR"; break;
    case LogLevel::WARNING: levelStr = "WARNING"; break;
    case LogLevel::INFO: levelStr = "INFO"; break;
  
  printf("[%s] ", levelStr);
  printf(format, args...);
  printf("\n");
  // 将日志写入文件
  std::ofstream file("log.txt", std::ios::app);
  file << "[" << levelStr << "] ";
  file << std::sprintf(format, args...) << "\n";
}
int main()
{
  log(LogLevel::INFO, "Program started");
  log(LogLevel::WARNING, "Invalid input: %s", "hello");
  log(LogLevel::ERROR, "File not found: %s", "data.txt");
  return 0;
}

在上面的代码中,我们首先定义了日志级别的枚举类LogLevel,用于记录不同级别的日志。然后,我们使用可变参数模板定义了一个名为log的函数,该函数接收日志级别、格式字符串以及可变参数args,将它们打印到控制台并写入日志文件中。

最后,在main函数中,我们调用log函数来记录不同级别的日志。

通过使用可变参数模板实现日志记录,我们可以非常方便地记录程序的运行状态和关键信息,更好地调试程序。同时,该方法也具有良好的扩展性和灵活性,可以根据实际需要自由拓展日志格式和记录方式。

  
  

评论区

请求出错了