GeekIMU/4.Software/GeekIMU Manager GUI 1.2/GeekIMUDriver 1.2/Src/Utils/log.c

69 lines
1.6 KiB
C
Raw Normal View History

#include "Log.h"
#include <stdarg.h>
#include <time.h>
#include <string.h>
static FILE* LogFile = NULL; // <20><>־<EFBFBD>ļ<EFBFBD>ָ<EFBFBD><D6B8>
static char DefaultLogFile[] = "libdm_log.txt"; // Ĭ<><C4AC><EFBFBD><EFBFBD>־<EFBFBD>ļ<EFBFBD>
// <20><>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><CAB1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
static void GetTimeStr(char* buffer, size_t size) {
time_t now = time(NULL);
struct tm* t = localtime(&now);
strftime(buffer, size, "%Y-%m-%d %H:%M:%S", t);
}
// <20><>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
static const char* GetLogLevelStr(LogLevel level) {
switch (level) {
case Info: return "INFO";
case Warn: return "WARNING";
case Error: return "ERROR";
case Debug: return "DEBUG";
default: return "UNKNOWN";
}
}
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>־<EFBFBD>ļ<EFBFBD>
void InitLog(const char* logFilePath) {
if (LogFile) {
CloseLog(); // <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
}
const char* filePath = logFilePath ? logFilePath : DefaultLogFile;
LogFile = fopen(filePath, "a"); // <20><>׷<EFBFBD><D7B7>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD>ļ<EFBFBD>
if (!LogFile) {
fprintf(stderr, "Failed to open log file: %s\n", filePath);
}
}
// д<><D0B4>־<EFBFBD>ĺ<EFBFBD><C4BA>ĺ<EFBFBD><C4BA><EFBFBD>
void WriteLog(LogLevel level, const char* format, ...) {
if (!LogFile) {
InitLog(NULL); // <20><><EFBFBD><EFBFBD>δ<EFBFBD><CEB4>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>־<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>Ĭ<EFBFBD><C4AC><EFBFBD>ļ<EFBFBD>
}
if (LogFile) {
char timeStr[20];
GetTimeStr(timeStr, sizeof(timeStr));
fprintf(LogFile, "[%s] [%s] ", timeStr, GetLogLevelStr(level));
va_list args;
va_start(args, format);
vfprintf(LogFile, format, args); // <20><>ʽ<EFBFBD><CABD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>־<EFBFBD><D6BE>Ϣ
va_end(args);
fprintf(LogFile, "\n");
fflush(LogFile); // ȷ<><C8B7><EFBFBD><EFBFBD>־ʵʱд<CAB1><D0B4>
}
}
// <20>ر<EFBFBD><D8B1><EFBFBD>־<EFBFBD>ļ<EFBFBD>
void CloseLog() {
if (LogFile) {
fclose(LogFile);
LogFile = NULL;
}
}