前言: 在个人的上一篇博客C/C++常见的预定义宏与基本使用方法-CSDN博客中对C/C++预定义宏的定义、常见的预定义宏及其用法做了初步的介绍,并可以了解到预定义宏可以用于C/C++程序的调试日志输出,本文基于预定义宏与调试日志输出需要出发定义调试日志输出宏模板,以用于程序开发者对程序错误的定位与运行日志的记录等。
调试与日志宏模板定义:
1、调试输出宏模板
cpp
#include <iostream>
#ifdef _DEBUG
#define LOG_DEBUG(msg) \
std::cout << "[DEBUG] " << __FILE__ << ":" << __LINE__ << " (" << __FUNCTION__ << ") - " << msg << std::endl;
#else
#define LOG_DEBUG(msg)
#endif
调试输出样例
cpp
LOG_DEBUG("This is debug output!")
[DEBUG] main.cpp:13 (main) This is debug output!
2、带有详细时间戳的调试输出宏模板
cpp
#include <iostream>
#include <chrono>
#include <iomanip>
#ifdef _DEBUG
#define LOG_DEBUG(msg) { \
std::time_t now = std::time(nullptr);
std::tm* local_time = std::localtime(&now);
std::cout << "[" << std::put_time(&tm, "%Y-%m-%d %H:%M:%S") << "] " \
<< "[DEBUG] " << __FILE__ << ":" << __LINE__ \
<< " (" << __FUNCTION__ << ") - " \
<< msg << std::endl; \
}
#else
#define LOG_DEBUG(msg)
#endif
调试输出样例:
cpp
LOG_DEBUG("This is debug output!")
[2025-09-29 10:32:16][DEBUG] main.cpp:13 (main) - This is debug output!
3、文件日志输出模板
cpp
#include <iostream>
#include <fstream>
// 模板主动缺省输出路径log_output_path,直接使用报错,以提醒使用时指定特定的日志输出路径
#define LOG_TO_FILE(msg) { \
std::string log_output_path = ; \
std::ofstream logFile(log_output_path, std::ios::app); \
logFile << "[INFO] " << __FILE__ << ":" << __LINE__ << " (" << __FUNCTION__ << ") - " << msg << std::endl; \
}
文件日志输出样例:
cpp
#include <iostream>
#include <fstream>
// 模板主动缺省输出路径log_output_path,直接使用报错,以提醒使用时指定特定的日志输出路径
#define LOG_TO_FILE(msg) { \
// 此处使用是指定输出路径为"/home/user/temp/log.txt"
std::string log_output_path = "/home/user/temp/log.txt"; \
std::ofstream logFile(log_output_path, std::ios::app); \
logFile << "[INFO] " << __FILE__ << ":" << __LINE__ << " (" << __FUNCTION__ << ") - " << msg << std::endl; \
}
LOG_TO_FILE("This is a log info!")
[INFO] main.cpp:14 (main) - This is a log info!
4、带有时间戳的文件日志输出模板
cpp
#include <iostream>
#include <fstream>
// 模板主动缺省输出路径log_output_path,直接使用报错,以提醒使用时指定特定的日志输出路径
#define LOG_TO_FILE(msg) { \
std::string log_output_path = ; \
std::ofstream logFile(log_output_path, std::ios::app); \
std::time_t now = std::time(nullptr);
std::tm* local_time = std::localtime(&now);
logFile << "[" << std::put_time(&tm, "%Y-%m-%d %H:%M:%S") << "] " \
<< "[INFO] " << __FILE__ << ":" << __LINE__ << " (" << __FUNCTION__ << ") - " \
<< msg << std::endl; \
}
文件日志输出样例:
cpp
#include <iostream>
#include <fstream>
// 模板主动缺省输出路径log_output_path,直接使用报错,以提醒使用时指定特定的日志输出路径
#define LOG_TO_FILE(msg) { \
// 此处使用是指定输出路径为"/home/user/temp/log.txt"
std::string log_output_path = "/home/user/temp/log.txt"; \
std::ofstream logFile(log_output_path, std::ios::app); \
std::time_t now = std::time(nullptr);
std::tm* local_time = std::localtime(&now);
logFile << "[" << std::put_time(&tm, "%Y-%m-%d %H:%M:%S") << "] " \
<< "[INFO] " << __FILE__ << ":" << __LINE__ << " (" << __FUNCTION__ << ") - " \
<< msg << std::endl; \
}
LOG_TO_FILE("This is a log info!")
[2025-09-29 10:41:45][INFO] main.cpp:14 (main) - This is a log info!