当前位置: 首页 > article >正文

console输出并写入

搞了好久搞出来的代码

//用两种代码 define保留 只显示时间 不显示年月 【成功】
#include <iostream>
#include <fstream>
#include <chrono>
#include <ctime>
#include <cstdarg>

#define LOG_TO_CONSOLE_AND_FILE_WITH_DATE
//#define LOG_TO_CONSOLE_AND_FILE

#ifdef LOG_TO_CONSOLE_AND_FILE_WITH_DATE
#define LOG(format, ...) LogToConsoleAndFile("log.txt", true, format, __VA_ARGS__)
#elif defined(LOG_TO_CONSOLE_AND_FILE)
#define LOG(format, ...) LogToConsoleAndFile("log.txt", false, format, __VA_ARGS__)
#else
#define LOG(format, ...) LogToConsole(format, __VA_ARGS__)
#endif

void LogToConsole(const char* format, ...)
{
    va_list args;
    va_start(args, format);
    vprintf(format, args);
    va_end(args);
}

void LogToConsoleAndFile(const std::string& filename, bool includeDate, const char* format, ...)
{
    // 打开文件以追加写入日志
    std::ofstream file(filename, std::ios::app);
    if (!file.is_open())
    {
        std::cerr << "无法打开日志文件:" << filename << std::endl;
        return;
    }

    // 获取时间戳
    auto now = std::chrono::system_clock::now();
    std::time_t currentTime = std::chrono::system_clock::to_time_t(now);
    std::tm timeInfo;
#ifdef _WIN32
    localtime_s(&timeInfo, &currentTime);
#else
    localtime_r(&currentTime, &timeInfo);
#endif
    char timeBuffer[128];
    if (includeDate)
    {
        std::strftime(timeBuffer, sizeof(timeBuffer), "%Y-%m-%d %T", &timeInfo);
    }
    else
    {
        std::strftime(timeBuffer, sizeof(timeBuffer), "%T", &timeInfo);
    }

    // 格式化日志消息
    va_list args;
    va_start(args, format);
    char buffer[256];
    vsnprintf(buffer, sizeof(buffer), format, args);
    va_end(args);

    // 在控制台和文件中输出日志消息
    std::printf("%s %s\n", timeBuffer, buffer);
    file << timeBuffer << " " << buffer << std::endl;
}

int main()
{
    int line = 23;
    int index = 1; // 请根据您的实际情况设置 index 的值
    int x{435}, y{334};
    LOG("---%d行------窗口:%d-----------坐标:%d,%d--------", line, index,x,y);

    return 0;
}

http://www.kler.cn/a/144383.html

相关文章:

  • android 保活的一种有效的方法
  • 深度学习模型命令行传参——断点调试解决方案
  • 2、git进阶操作
  • Excel表中合并两个Sheet的方法?
  • 第十四章 控制值的转换 - 在DISPLAYLIST中投影值
  • 【深度学习】卷积神经网络(CNN)的参数优化方法
  • 毅速:复杂零件制造首选3D打印
  • idea编译问题导致接口调用不通
  • Labelme加载AI(Segment-Anything)模型进行图像标注
  • 雷军:我的程序人生路
  • 网络运维与网络安全 学习笔记2023.11.25
  • ubuntu22.04 arrch64版在线安装maven
  • echats autoresize使用版本
  • 6.3.WebRTC中的SDP类的结构
  • 区块链相关技术、概念以及技术实现过程中的一些关键问题 Smart Contracts and Blockchains
  • JOSEF约瑟 BLD-20高压漏电保护继电器 50-1000ma AC220V
  • 视频剪辑技巧:如何高效批量转码MP4视频为MOV格式
  • AI创作工具:Claude2注册保姆级教程
  • React中如何解决点击<Tree>节点前面三角区域不触发onClick事件
  • 如何将Postman API转换JMeter进行扩展