21xrx.com
2024-11-22 06:47:53 Friday
登录
文章检索 我的文章 写文章
使用C++可变参数模板记录日志
2023-07-04 22:36:29 深夜i     --     --
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函数来记录不同级别的日志。

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

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复