c++写一个往usrdata/路径存日志的程序,且日志文件按照nw+日期时间命名,且当文件个数达到10个后自动删除最旧的日志文件
时间: 2024-02-17 16:02:52 浏览: 129
C++程序写日志文件
以下是一个简单的C++程序,用于将日志写入usrdata目录下的文件,并自动删除最旧的日志文件,确保最多只有10个日志文件存在。该程序使用了C++11的文件处理库以及ctime库来获取当前日期和时间。
```c++
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <ctime>
#include <algorithm>
#include <experimental/filesystem>
namespace fs = std::experimental::filesystem;
std::string getDateTimeString() {
std::time_t now = std::time(nullptr);
char buffer[80];
std::strftime(buffer, sizeof(buffer), "%Y%m%d_%H%M%S", std::localtime(&now));
return std::string(buffer);
}
void writeLog(const std::string& logMessage) {
const std::string logDir = "usrdata";
const std::string logPrefix = "nw";
const std::string logExtension = ".log";
const int maxLogFiles = 10;
// Create log directory if it doesn't exist
if (!fs::exists(logDir)) {
fs::create_directory(logDir);
}
// Get list of all log files in directory
std::vector<std::string> logFiles;
for (const auto& entry : fs::directory_iterator(logDir)) {
if (entry.path().extension() == logExtension) {
logFiles.push_back(entry.path().filename().string());
}
}
// Sort log files by date in ascending order
std::sort(logFiles.begin(), logFiles.end());
// Delete oldest files if there are too many
while (logFiles.size() >= maxLogFiles) {
fs::remove(fs::path(logDir) / logFiles.front());
logFiles.erase(logFiles.begin());
}
// Get current date and time as string
const std::string dateTimeString = getDateTimeString();
// Construct file name
std::ostringstream oss;
oss << logPrefix << dateTimeString << logExtension;
const std::string logFileName = oss.str();
// Write log message to file
std::ofstream logFile(logDir + "/" + logFileName);
logFile << logMessage;
}
int main() {
writeLog("This is a test log message\n");
return 0;
}
```
该程序首先定义了一些常量,如日志目录、日志文件前缀、日志文件后缀以及最大日志文件数。然后,它使用文件系统库获取日志目录中所有以“.log”结尾的文件的列表,并按升序排序。接下来,程序检查日志文件数是否超过最大允许数,如果是,则删除最旧的日志文件,直到文件数符合要求。然后,程序获取当前日期和时间,并将其用于构造新的日志文件名。最后,程序将日志消息写入新的日志文件中。
请注意,这个程序是一个简单的示例,对于实际生产环境的需求,可能需要做更多的改进和优化。例如,当多个进程同时写入日志时,可能需要使用文件锁来避免竞争条件。
阅读全文