使用C++编写简单的运行日志接口

下面是一个使用C++编写的示例,满足你的需求。这个示例在C++中使用了fstream来处理文件操作,并且使用了<cstdlib>库中的std::system函数来检查内存空间:

#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>

#define LOG_FILE "log.txt"
#define MAX_MEMORY_SIZE_MB 200

class Logger {
public:
    Logger() {
        clearLogFile();
    }

    void log(const std::string& message) {
        std::ofstream logFile(LOG_FILE, std::ios::app);

        if (!logFile.is_open()) {
            std::perror("Error opening log file");

            if (checkMemorySpace()) {
                logFile.open(LOG_FILE, std::ios::app);
                if (logFile.is_open()) {
                    logFile << "Log file created.\n";
                    logFile.close();
                }
            }
            
            return;
        }

        std::time_t now = std::time(0);
        std::tm* timeInfo = std::localtime(&now);

        logFile << "[" << timeInfo->tm_year + 1900 << "-"
                << timeInfo->tm_mon + 1 << "-"
                << timeInfo->tm_mday << " "
                << timeInfo->tm_hour << ":"
                << timeInfo->tm_min << ":"
                << timeInfo->tm_sec << "] "
                << message << std::endl;

        std::cout << message << std::endl;  // 输出到控制台
    }

private:
    void clearLogFile() {
        std::ofstream logFile(LOG_FILE, std::ios::trunc);
        logFile.close();
    }

    bool checkMemorySpace() {
        std::system("touch temp_file");
        std::ifstream tempFile("temp_file");

        if (tempFile.is_open()) {
            tempFile.seekg(MAX_MEMORY_SIZE_MB * 1024 * 1024 - 1, std::ios::cur);
            tempFile.put('\0');
            tempFile.close();
            std::system("rm temp_file");
            return true;
        }

        return false;
    }
};

int main() {
    Logger logger;

    logger.log("日志已清空并开始记录");
    logger.log("这是一个信息");

    // 其他代码...

    return 0;
}

这个示例在Logger类中包含了清空日志文件的方法clearLogFile和检查内存空间的方法checkMemorySpace。在log方法中,首先尝试打开日志文件,如果打开失败,则检查内存空间,如果内存足够,则创建新的日志文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

茶包不是trouble

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值