📄 log.cpp
字号:
#include <stdio.h>
//#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include "Log.h"
static Log *systemLog = NULL;
// systemLog = NULL;
void LogPrintf(unsigned int logLevel,char *format,...)
{
char logString[500];
char logStringTime[700];
if( systemLog == NULL)
{
systemLog = new Log;
int len = systemLog->OpenLog();
if(len < 0)
{
printf("不能打开日志文件 \n");
return;
}
}
if(logLevel < systemLog->GetCurrentLevel()) //是否需要记录
return;
memset(logString,0,sizeof(logString));
memset(logStringTime,0,sizeof(logStringTime));
va_list ap;
va_start(ap,format);
int n = vsprintf(logString,format,ap);
if( n>= 500)
{
printf("print_err() strlen error:%d.\n",n);
return;
}
strcat(logString,"\n");
Timer curTime;
//curTime.GetLongTime(logStringTime);
sprintf(logStringTime,"[ %04d-%02d-%02d %02d:%02d:%02d ] ",
curTime.GetYear(),curTime.GetMonth(),curTime.GetDay(),
curTime.GetHour(),curTime.GetMinute(),curTime.GetSecond());
strcat(logStringTime,logString);
systemLog->WriteLog(logStringTime);
printf("%s",logStringTime);
va_end(ap);
}
Log::Log(unsigned int logLevel, unsigned int logType,char *logPrefix,char *logDir,bool isOutputConsole)
{
mLogLevel = logLevel;
mIsOutputConsole = isOutputConsole;
//mLogBuf = NULL;
//Timer curTime;
#ifdef __Win32__
CTime curTime = CTime::GetCurrentTime();
mLogBeginTime = curTime;
#endif
mLogType = logType;
if(( logPrefix != NULL))
{
int len = strlen(logPrefix);
if( len <= MaxLogFilePrefixLen)
strcpy(mLogFilePrefix,logPrefix);
}
if(( logDir != NULL) )
{
int len = strlen(logDir);
if( len <= MaxLogDirectoryLen )
strcpy(mLogDirectory,logDir);
}
#ifdef __Win32__
BOOL bVal = CreateDirectory(".\\log",NULL);
#endif
#ifdef __REDHATLINUX__
//SInt32 vao = mkdir("./log",S_IRWXU);
SInt32 vao = mkdir(mLogDirectory,S_IRWXU);
#endif
mLogRemainDay = 2;
}
Log::~Log()
{
}
bool Log::SetLogDirectory(char *dir)
{
if(dir == NULL)
return false;
if( strlen(dir) > MaxLogDirectoryLen)
return false;
strcpy( mLogDirectory , dir);
return true;
}
bool Log::SetLogFilePrefix(char *prefix)
{
if(prefix == NULL)
return false;
if( strlen(prefix) > MaxLogFilePrefixLen)
return false;
strcpy( mLogFilePrefix , prefix);
return true;
}
void Log::SetWorkDirectory()
{
}
void Log::SetLogConsoleOutput(bool isOutput)
{
mIsOutputConsole = isOutput;
}
#ifdef __Win32__
void Log::GetLogFileName(char *buf, CTime *t)
{
if( mLogDirectory != NULL )
{
strcpy(buf,mLogDirectory);
strcat(buf,"\\");
}
strcat(buf,mLogFilePrefix);
char timeStamp[50];
memset(timeStamp,0,sizeof(timeStamp));
sprintf(timeStamp,"%04d-%02d-%02d",t->GetYear(),t->GetMonth(),t->GetDay());
strcat(buf,timeStamp);
strcat(buf,".txt");
}
#endif
#ifdef __REDHATLINUX__
void Log::GetLogFileName(char *buf,Timer *t)
{
if( mLogDirectory != NULL )
{
strcpy(buf,mLogDirectory);
strcat(buf,"/");
}
strcat(buf,mLogFilePrefix);
char timeStamp[50];
memset(timeStamp,0,sizeof(timeStamp));
t->GetLogTime(timeStamp);
strcat(buf,timeStamp);
strcat(buf,".txt");
}
#endif
int Log::GetLogFile(char *buf)
{
//
///加入时间戳
#ifdef __Win32__
//
if( mLogDirectory != NULL )
{
strcpy(buf,mLogDirectory);
strcat(buf,"\\");
}
strcat(buf,mLogFilePrefix);
char timeStamp[50];
memset(timeStamp,0,sizeof(timeStamp));
CTime curTimer = CTime::GetCurrentTime();
sprintf(timeStamp,"%04d-%02d-%02d",curTimer.GetYear(),curTimer.GetMonth(),curTimer.GetDay());
strcat(buf,timeStamp);
strcat(buf,".txt");
#endif
#ifdef __REDHATLINUX__
//
if( mLogDirectory != NULL )
{
strcpy(buf,mLogDirectory);
strcat(buf,"/");
}
strcat(buf,mLogFilePrefix);
char timeStamp[50];
memset(timeStamp,0,sizeof(timeStamp));
Timer curTimer;
curTimer.GetLogTime(timeStamp);
strcat(buf,timeStamp);
strcat(buf,".txt");
#endif
return 0;
}
int Log::OpenLog()
{
mFileMutex.Lock();
#ifdef __Win32__
//CTime curTime = CTime::GetCurrentTime();
//mFileOpenTime = curTime;
#endif
#ifdef __REDHATLINUX__
//Timer curTime;
//mFileOpenTime = curTime;
#endif
memset(mCurrentFileName,0,sizeof(mCurrentFileName));
int err = GetLogFile(mCurrentFileName);
if(err)
{
mFileMutex.Unlock();
return err;
}
//fp = fopen(mCurrentFileName,"w+");
fp = fopen(mCurrentFileName,"a+");
if(fp == NULL)
{
printf("不能打开日志文件 %s",mCurrentFileName);
mFileMutex.Unlock();
return -1;
}
mFileMutex.Unlock();
return 0;
}
int Log::WriteLog(char *buf)
{
int err = 0;
mFileMutex.Lock();
if( mIsOutputConsole )
printf("%s",buf);
if(!IsOpen())
{
mFileMutex.Unlock();
return -1;
}
err = fputs(buf,fp);
if(err < 0)
{
mFileMutex.Unlock();
return -1;
}
err = fflush(fp);
mFileMutex.Unlock();
//if( err != 0 )
// OpenLog();
#ifdef __Win32__
CTime curTime = CTime::GetCurrentTime();
#endif
#ifdef __REDHATLINUX__
Timer curTime;
#endif
if(curTime.GetDay() != mFileOpenTime.GetDay())
{
//CloseLog();
ClearLogDirectory();
/// 删除以前的日志文件
//OpenLog();
}
return err;
}
int Log::CloseLog()
{
mFileMutex.Lock();
fflush(fp);
fclose(fp);
mFileMutex.Unlock();
return 0;
}
int Log::IsOpen()
{
if(ferror(fp) != 0)
return 0; //-1;
return 1;
}
unsigned int Log::GetCurrentLevel()
{
return mLogLevel;
}
void Log::ClearLogDirectory()
{
/// 删除不需要的日志文件,以节省磁盘空间
//CreateDirectory
/*
if( mLogType == LOG_EVERY_DAY)
return;
else if( mLogType == LOG_TWO_FILE_SWAP )
{
}
else if( mLogType == LOG_WEEK_FILE_SWAP )
{
}
else if( mLogType == LOG_MONTH_FILE_SWAP)
{
}
else if( mLogType == LOG_YEAR_FILE_SWAP)
{
}
*/
//CTimeSpan
#ifdef __Win32__
CTime curTime = CTime::GetCurrentTime();
if(mLogRemainDay < 0 || mLogRemainDay > 366)
mLogRemainDay = 2;
CTimeSpan span(mLogRemainDay,0,0,0);
curTime = curTime - span;
//mLogRemainDay
char delFileName[200];
memset(delFileName,0,sizeof(delFileName));
GetLogFileName(delFileName,&curTime);
DeleteFile(delFileName);
#endif
#ifdef __REDHATLINUX__
Timer curTime;
if(mLogRemainDay < 0 || mLogRemainDay > 366)
mLogRemainDay = 2;
TimerSpan span(mLogRemainDay,0,0,0);
curTime = curTime - span;
//mLogRemainDay
char delFileName[200];
memset(delFileName,0,sizeof(delFileName));
GetLogFileName(delFileName,&curTime);
remove(delFileName);
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -