C和C++ log
一、
这篇文章对程序日志总结很不错
将代码中的调试信息输出到日志文件中 https://www.cnblogs.com/hyacinthLJP/p/17291132.html
1. C++项目中用到c代码,各个代码打印日志用的不一样,Qt C++用qDebug,纯C++用cout,C语言用printf,但打印日志结果不同步,影响判断,误导找问题。
所以最好采用记录日志的形式,记录的日志同步。
2.在mfc使用会出现以下错误:
错误 C4996 '_itoa': This function or variable may be unsafe. Consider using _itoa_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
解决方法:
项目右键 -- 属性 -- C/C++ -- 预处理器 -- 预处理器定义,在里面添加 _CRT_SECURE_NO_DEPRECATE 即可;
二、C
log2.h
#ifndef LOG_H #define LOG_H #include <stdio.h> #include <stdint.h> #include <stdbool.h> #ifdef __cplusplus extern "C" { #endif //class log2 //{ //public: //log2(); void logd(const char *type_name, const uint8_t *data, int len); void logdx(const char *type_name, const uint8_t *data, int len); void logRemoveFile(); //private: //}; #ifdef __cplusplus } #endif #endif // LOG2_H
log2.c
#include "stdafx.h"//mfc 需要添加此头文件 #include "log.h" #include "time.h" #include "windows.h" const char* FILE_PATH = "logc.txt"; void logd(const char *type_name, const uint8_t *data, int len) { FILE* pFile = fopen("logc.txt", "a"); SYSTEMTIME st = { 0 }; GetLocalTime(&st); fprintf(pFile, "[%04d-%02d-%02d %02d:%02d:%02d %03d] ", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds); fprintf(pFile, "%s\r\n", type_name); for (int i = 0; i < len; i++) { fprintf(pFile, " %d", data[i]); } fprintf(pFile, "\r\n"); fflush(pFile); fclose(pFile); } void logdx(const char *type_name, const uint8_t *data,int len) { FILE* pFile = fopen(FILE_PATH, "a"); SYSTEMTIME st = { 0 }; GetLocalTime(&st); fprintf(pFile, "[%04d-%02d-%02d %02d:%02d:%02d %03d] ", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds); fprintf(pFile, "%s\r\n", type_name); for (int i = 0; i < len; i++) { fprintf(pFile, " %02X", data[i]); } fprintf(pFile, "\r\n"); fflush(pFile); fclose(pFile); } void logRemoveFile() { remove("logc.txt"); }