在Linux中使用C++编写日志程序,你可以选择多种方式,但最常见的做法是使用标准库中的文件操作功能,或者利用现有的日志库,如spdlog、log4cpp等。以下是一个使用标准库文件操作功能的基本日志程序的示例:
#include <iostream>
#include <fstream>
#include <string>
#include <ctime>
#include <iomanip>
class Logger {
private:
std::ofstream logFile;
std::string logFilePath;
public:
Logger(const std::string& filePath) : logFilePath(filePath) {
// 打开日志文件,如果文件不存在则创建它
logFile.open(logFilePath, std::ios::out | std::ios::app);
if (!logFile.is_open()) {
std::cerr << "无法打开日志文件: " << logFilePath << std::endl;
}
}
~Logger() {
// 析构函数中关闭日志文件
if (logFile.is_open()) {
logFile.close();
}
}
void log(const std::string& message, const std::string& level = "INFO") {
// 获取当前时间并格式化
time_t now = time(0);
tm *ltm = localtime(&now);
std::ostringstream ss;
ss << std::put_time(ltm, "%Y-%m-%d %H:%M:%S") << " [" << level << "] " << message << std::endl;
// 将格式化后的日志信息写入文件
if (logFile.is_open()) {
logFile << ss.str();
} else {
std::cerr << "日志文件未打开,无法记录日志信息。" << std::endl;
}
}
void debug(const std::string& message) {
log(message, "DEBUG");
}
void info(const std::string& message) {
log(message, "INFO");
}
void warning(const std::string& message) {
log(message, "WARNING");
}
void error(const std::string& message) {
log(message, "ERROR");
}
void critical(const std::string& message) {
log(message, "CRITICAL");
}
};
int main() {
Logger logger("app.log"); // 创建一个日志对象,日志文件名为app.log
logger.info("程序启动。"); // 记录一条信息级别的日志
logger.debug("这是一个调试信息。"); // 记录一条调试级别的日志
logger.warning("这是一个警告信息。"); // 记录一条警告级别的日志
logger.error("发生了一个错误!"); // 记录一条错误级别的日志
logger.critical("程序即将退出!"); // 记录一条严重级别的日志
return 0;
}
在这个例子中,Logger 类封装了日志文件的打开、关闭和写入操作。每个日志级别的方法(如 info, debug, warning, error, critical)都调用 log 方法来写入一条日志,同时附带上日志级别。日志信息包括时间戳、日志级别和日志消息。