📄 logunit.cpp
字号:
#include "logunit.h"
#include <string.h>
#include <stdarg.h>
LogInfo::LogInfo(int max){
int i;
for(i =0; i < Max_Channels; i ++){
LogOn[i] = false;
}
for(i =0; i < Max_Channels; i++)
label[i][0] = 0;
fp = NULL;
maxlogcount = max;
logbuffer_len = 0;
validtime_s = 0;
validtime_e = 6000;
logpause = false;
LogID = -1;
b_mutex_guard = false;
}
LogInfo::~LogInfo(){
if (fp != NULL){
if (logbuffer_len > 0){
fwrite(logbuffer, logbuffer_len, 1, fp);
logbuffer_len = 0;
}
fclose(fp);
}
if(b_mutex_guard){
#ifdef WIN32
DeleteCriticalSection(&mutex_guard);
#else // _LINUX
pthread_mutex_destroy(&mutex_guard);
#endif
b_mutex_guard = false;
}
}
bool LogInfo::CanLog(int lognum){
if (fp==NULL || !IsValidChannel(lognum)) return false;
if (IsChannelOn(lognum) && !logpause
&& time >= validtime_s && time < validtime_e){
return true;
}
else
return false;
}
void LogInfo::Init_Mutex_Guard(){
b_mutex_guard = true;
#ifdef WIN32
InitializeCriticalSection(&mutex_guard); //initialize mutex
#else // _LINUX
pthread_mutex_init(&mutex_guard,NULL);
#endif
}
void LogInfo::AssociateFile(char *filename){
if (fp == NULL){
strcpy(logfilename, filename);
fp = fopen(logfilename, "w");
}
}
void LogInfo::SetLogOn(int lognum){
if (IsValidChannel(lognum))
LogOn[lognum] = true;
}
void LogInfo::SetLogOff(int lognum){
if (IsValidChannel(lognum))
LogOn[lognum] = false;
}
void LogInfo::SetLabel(int lognum, char* caption){
if (IsValidChannel(lognum))
strcpy(&label[lognum][0], caption);
}
void LogInfo::LogCore(int lognum, char * log){
if (fp == NULL || !IsValidChannel(lognum))
return;
int writetofile = 0;
int len_header, len_logstring;
if (label[lognum][0] != 0)
len_header = sprintf(&header[0],"(p%d,t%d)[%s]", LogID, time, label[lognum]);
else
len_header = sprintf(&header[0],"(p%d,t%d)", LogID, time);
len_logstring = strlen(log);
if (logbuffer_len + len_header + len_logstring + 1 > 5 * Max_LogMesg - 100 && logbuffer_len > 0){
fwrite(logbuffer, logbuffer_len, 1, fp);
fflush(fp);
logbuffer_len = 0;
}
memcpy(logbuffer+logbuffer_len, header, len_header);
logbuffer_len += len_header;
memcpy(logbuffer+logbuffer_len, log, len_logstring);
logbuffer_len += len_logstring;
*(logbuffer+logbuffer_len) = 10;
logbuffer_len += 1;
logcount ++;
if (logcount >= maxlogcount) {
fflush(fp);
logcount = 0;
}
}
void LogInfo::LogAction(int lognum,char * format, ...){
if (!CanLog(lognum)) return;
Mutex_Lock();
va_list argptr;
va_start(argptr, format);
vsprintf(logstring, format, argptr);
va_end(argptr);
LogCore(lognum,logstring);
Mutex_UnLock();
}
void LogInfo::LogAction(char* format, ...){
if (!CanLog(0)) return;
Mutex_Lock();
va_list argptr;
va_start(argptr, format);
vsprintf(logstring, format, argptr);
va_end(argptr);
LogCore(0,logstring);
Mutex_UnLock();
}
/****************** Log Data ***********************/
//Change technology of writing file to reduce
void LogData::LogCore(int lognum, char * log){
if (fp == NULL || !IsValidChannel(lognum) )
return;
int len_logstring;
len_logstring = strlen(log);
if (logbuffer_len + len_logstring + 1 > 5 * Max_LogMesg - 100){
fwrite(logbuffer, logbuffer_len, 1, fp);
logbuffer_len = 0;
}
memcpy(logbuffer+logbuffer_len, log, len_logstring);
logbuffer_len += len_logstring;
*(logbuffer+logbuffer_len) = 10;
logbuffer_len += 1;
logcount ++;
if (logcount >= maxlogcount && fp != NULL) {
fflush(fp);
logcount = 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -