in eventmesh-sdks/eventmesh-sdk-c/src/rmb_log.c [395:722]
int ShiftRmbLog (FILE * file)
{
if (strlen (pStRmbLog->_para._path) == 0
|| pStRmbLog->_para._shiftType == RMB_LOG_TYPE_NORMAL)
{
return 0;
}
if (pStRmbLog->_para._shiftType == RMB_LOG_TYPE_CYCLE)
{
if (stat (pStRmbLog->_logBaseFileName, &pStRmbLog->gRmbSb) < 0)
{
pStRmbLog->_curFileSize = 0;
}
else
{
pStRmbLog->_curFileSize = (int) pStRmbLog->gRmbSb.st_size;
}
if (pStRmbLog->_curFileSize < pStRmbLog->_para._maxFileSize)
{
return 0;
}
OpenRmbLog ();
//file lock
pStRmbLog->logFileLock.l_type = F_WRLCK;
pStRmbLog->logFileLock.l_start = 0;
pStRmbLog->logFileLock.l_whence = SEEK_SET;
pStRmbLog->logFileLock.l_len = 0;
pStRmbLog->logFileLock.l_pid = getpid ();
if (-1 != fcntl (pStRmbLog->_fd, F_SETLKW, &pStRmbLog->logFileLock))
{
int fd = OpenStateLog ();
pStRmbLog->logStateLock.l_type = F_WRLCK;
pStRmbLog->logStateLock.l_start = 0;
pStRmbLog->logStateLock.l_whence = SEEK_SET;
pStRmbLog->logStateLock.l_len = 0;
pStRmbLog->logStateLock.l_pid = getpid ();
if (-1 != fcntl (fd, F_SETLKW, &pStRmbLog->logStateLock))
{
//GetCurFileNum(pStRmbLog->_pStatFile);
GetCurFileNum (pStRmbLog->_pStatFile);
// printf("pid=%d,getCurNo=%d,CurNums=%d", getpid(), pStRmbLog->_curFileNo, pStRmbLog->_curFileNums);
snprintf (pStRmbLog->_logFileName,
sizeof (pStRmbLog->_logFileName) - 1, "%s.%d",
pStRmbLog->_logBaseFileName, pStRmbLog->_curFileNo);
if (stat (pStRmbLog->_logBaseFileName, &pStRmbLog->gRmbSb) != -1
&& (int) pStRmbLog->gRmbSb.st_size >=
pStRmbLog->_para._maxFileSize)
{
pStRmbLog->_curFileNums += 1;
if (pStRmbLog->_curFileNums > pStRmbLog->_para._maxFileNum)
{
if (access (pStRmbLog->_logFileName, F_OK) == 0)
{
// printf("pid=%d remove file=%s,curNo=%d, curNum=%d", getpid(), pStRmbLog->_logFileName, pStRmbLog->_curFileNo, pStRmbLog->_curFileNums);
remove (pStRmbLog->_logFileName);
}
pStRmbLog->_curFileNums -= 1;
}
if (access (pStRmbLog->_logBaseFileName, F_OK) == 0)
{
// printf("pid=%d rename %s-->%s, curNo=%d,curNum=%d", getpid(), pStRmbLog->_logBaseFileName, pStRmbLog->_logFileName, pStRmbLog->_curFileNo, pStRmbLog->_curFileNums);
rename (pStRmbLog->_logBaseFileName, pStRmbLog->_logFileName);
}
else
{
// printf("pid=%d baseFileName=%s not exist", getpid(), pStRmbLog->_logBaseFileName);
}
pStRmbLog->_curFileNo =
(pStRmbLog->_curFileNo + 1) % pStRmbLog->_para._maxFileNum;
// if (pStRmbLog->_curFileNo == 0)
// {
// pStRmbLog->_curFileNo = 1;
// }
SetCurFileNum (pStRmbLog->_pStatFile);
//snprintf(pStRmbLog->_logFileName, sizeof(pStRmbLog->_logFileName) - 1, "%s.%d", pStRmbLog->_logBaseFileName, pStRmbLog->_curFileNo);
}
// printf("pid=%d setFileNum.curNo=%d curNum=%d", getpid(), pStRmbLog->_curFileNo, pStRmbLog->_curFileNums);
pStRmbLog->logStateLock.l_type = F_UNLCK;
pStRmbLog->logStateLock.l_whence = SEEK_SET;
pStRmbLog->logStateLock.l_start = 0;
pStRmbLog->logStateLock.l_len = 0;
fcntl (fd, F_SETLKW, &pStRmbLog->logStateLock);
}
CloseStateLog ();
// printf("shift over!pid=%d, curNo=%d,curNum=%d, logFileName=%s", getpid(), pStRmbLog->_curFileNo, pStRmbLog->_curFileNums, pStRmbLog->_logFileName);
//strncpy(pStRmbLog->_toDeleteFileName, pStRmbLog->_logFileName, sizeof(pStRmbLog->_toDeleteFileName) - 1);
pStRmbLog->logFileLock.l_type = F_UNLCK;
pStRmbLog->logFileLock.l_whence = SEEK_SET;
pStRmbLog->logFileLock.l_start = 0;
pStRmbLog->logFileLock.l_len = 0;
fcntl (pStRmbLog->_fd, F_SETLKW, &pStRmbLog->logFileLock);
}
CloseRmbLog ();
return 0;
}
else if (pStRmbLog->_para._shiftType == RMB_LOG_TYPE_DAILY)
{
time_t curTime = time (NULL);
//日期变更发送滚动
if (RmbIsOtherDay (&curTime, &pStRmbLog->_lastShiftTime))
{
OpenRmbLog ();
//file lock
pStRmbLog->logFileLock.l_type = F_WRLCK;
pStRmbLog->logFileLock.l_start = 0;
pStRmbLog->logFileLock.l_whence = SEEK_SET;
pStRmbLog->logFileLock.l_len = 0;
pStRmbLog->logFileLock.l_pid = getpid ();
if (-1 != fcntl (pStRmbLog->_fd, F_SETLKW, &pStRmbLog->logFileLock))
{
int fd = OpenStateLog ();
pStRmbLog->logStateLock.l_type = F_WRLCK;
pStRmbLog->logStateLock.l_start = 0;
pStRmbLog->logStateLock.l_whence = SEEK_SET;
pStRmbLog->logStateLock.l_len = 0;
pStRmbLog->logStateLock.l_pid = getpid ();
if (-1 != fcntl (fd, F_SETLKW, &pStRmbLog->logStateLock))
{
GetCurFileNum (pStRmbLog->_pStatFile);
snprintf (pStRmbLog->_logFileName,
sizeof (pStRmbLog->_logFileName) - 1, "%s.%d",
pStRmbLog->_logBaseFileName, pStRmbLog->_curFileNo);
if (RmbIsOtherDay (&curTime, &pStRmbLog->_lastShiftTime))
{
pStRmbLog->_curFileNums += 1;
if (pStRmbLog->_curFileNums > pStRmbLog->_para._maxFileNum)
{
if (access (pStRmbLog->_logFileName, F_OK) == 0)
{
remove (pStRmbLog->_logFileName);
}
pStRmbLog->_curFileNums -= 1;
}
if (access (pStRmbLog->_logBaseFileName, F_OK) == 0)
{
rename (pStRmbLog->_logBaseFileName, pStRmbLog->_logFileName);
}
snprintf (pStRmbLog->_logBaseFileName,
sizeof (pStRmbLog->_logBaseFileName), "%s_%s.log",
pStRmbLog->_para._path, RmbGetShortDateStr (&curTime));
snprintf (pStRmbLog->_logFileName,
sizeof (pStRmbLog->_logFileName), "%s.0",
pStRmbLog->_logBaseFileName);
pStRmbLog->_curFileNo = 0;
pStRmbLog->_curFileNums = 0;
pStRmbLog->_lastShiftTime = curTime;
SetCurFileNum (pStRmbLog->_pStatFile);
}
else
{
snprintf (pStRmbLog->_logBaseFileName,
sizeof (pStRmbLog->_logBaseFileName), "%s_%s.log",
pStRmbLog->_para._path, RmbGetShortDateStr (&curTime));
}
pStRmbLog->logStateLock.l_type = F_UNLCK;
pStRmbLog->logStateLock.l_whence = SEEK_SET;
pStRmbLog->logStateLock.l_start = 0;
pStRmbLog->logStateLock.l_len = 0;
fcntl (fd, F_SETLKW, &pStRmbLog->logStateLock);
}
CloseStateLog ();
pStRmbLog->logFileLock.l_type = F_UNLCK;
pStRmbLog->logFileLock.l_whence = SEEK_SET;
pStRmbLog->logFileLock.l_start = 0;
pStRmbLog->logFileLock.l_len = 0;
fcntl (pStRmbLog->_fd, F_SETLKW, &pStRmbLog->logFileLock);
}
CloseRmbLog ();
return 0;
}
if (stat (pStRmbLog->_logBaseFileName, &pStRmbLog->gRmbSb) < 0)
{
pStRmbLog->_curFileSize = 0;
}
else
{
pStRmbLog->_curFileSize = (int) pStRmbLog->gRmbSb.st_size;
}
if (pStRmbLog->_curFileSize < pStRmbLog->_para._maxFileSize)
{
return 0;
}
OpenRmbLog ();
//file lock
pStRmbLog->logFileLock.l_type = F_WRLCK;
pStRmbLog->logFileLock.l_start = 0;
pStRmbLog->logFileLock.l_whence = SEEK_SET;
pStRmbLog->logFileLock.l_len = 0;
pStRmbLog->logFileLock.l_pid = getpid ();
if (-1 != fcntl (pStRmbLog->_fd, F_SETLKW, &pStRmbLog->logFileLock))
{
int fd = OpenStateLog ();
pStRmbLog->logStateLock.l_type = F_WRLCK;
pStRmbLog->logStateLock.l_start = 0;
pStRmbLog->logStateLock.l_whence = SEEK_SET;
pStRmbLog->logStateLock.l_len = 0;
pStRmbLog->logStateLock.l_pid = getpid ();
if (-1 != fcntl (fd, F_SETLKW, &pStRmbLog->logStateLock))
{
GetCurFileNum (pStRmbLog->_pStatFile);
snprintf (pStRmbLog->_logFileName, sizeof (pStRmbLog->_logFileName),
"%s.%d", pStRmbLog->_logBaseFileName,
pStRmbLog->_curFileNo);
if (stat (pStRmbLog->_logBaseFileName, &pStRmbLog->gRmbSb) != -1
&& (int) pStRmbLog->gRmbSb.st_size >=
pStRmbLog->_para._maxFileSize)
{
pStRmbLog->_curFileNums += 1;
if (pStRmbLog->_curFileNums > pStRmbLog->_para._maxFileNum)
{
if (access (pStRmbLog->_logFileName, F_OK) == 0)
{
remove (pStRmbLog->_logFileName);
}
pStRmbLog->_curFileNums -= 1;
}
//CloseZrdLog();
if (access (pStRmbLog->_logBaseFileName, F_OK) == 0)
{
rename (pStRmbLog->_logBaseFileName, pStRmbLog->_logFileName);
}
pStRmbLog->_curFileNo =
(pStRmbLog->_curFileNo + 1) % pStRmbLog->_para._maxFileNum;
// if (pStRmbLog->_curFileNo == 0)
// {
// pStRmbLog->_curFileNo = 1;
// }
SetCurFileNum (pStRmbLog->_pStatFile);
}
pStRmbLog->logStateLock.l_type = F_UNLCK;
pStRmbLog->logStateLock.l_whence = SEEK_SET;
pStRmbLog->logStateLock.l_start = 0;
pStRmbLog->logStateLock.l_len = 0;
fcntl (fd, F_SETLKW, &pStRmbLog->logStateLock);
}
CloseStateLog ();
pStRmbLog->logFileLock.l_type = F_UNLCK;
pStRmbLog->logFileLock.l_whence = SEEK_SET;
pStRmbLog->logFileLock.l_start = 0;
pStRmbLog->logFileLock.l_len = 0;
fcntl (pStRmbLog->_fd, F_SETLKW, &pStRmbLog->logFileLock);
}
CloseRmbLog ();
return 0;
}
else if (pStRmbLog->_para._shiftType == RMB_LOG_TYPE_DAILY_AND_CYCLE)
{
time_t curTime = time (NULL);
//日期变更发送滚动
if (RmbIsOtherDay (&curTime, &pStRmbLog->_lastShiftTime))
{
pStRmbLog->_curFileNums += 1;
//假如个数限制,则删除老的
if (pStRmbLog->_curFileNums > pStRmbLog->_para._maxFileNum)
{
remove (pStRmbLog->_toDeleteFileName);
pStRmbLog->_curFileNums -= 1;
StDayInfo dayInfo;
FindNextDeleteLog (&dayInfo);
}
//GetCurStateFromRmbLogByDaily_V3(); //保证没有出错
//rename
//CloseRmbLog();
rename (pStRmbLog->_logBaseFileName, pStRmbLog->_logFileName);
snprintf (pStRmbLog->_logBaseFileName,
sizeof (pStRmbLog->_logBaseFileName), "%s_%s.log",
pStRmbLog->_para._path, RmbGetShortDateStr (&curTime));
snprintf (pStRmbLog->_logFileName, sizeof (pStRmbLog->_logFileName),
"%s_1.log", pStRmbLog->_logBaseFileName);
pStRmbLog->_curFileNo = 1;
//OpenRmbLog();
return 0;
}
if (stat (pStRmbLog->_logBaseFileName, &pStRmbLog->gRmbSb) < 0)
{
pStRmbLog->_curFileSize = 0;
}
else
{
pStRmbLog->_curFileSize = (int) pStRmbLog->gRmbSb.st_size;
}
if (pStRmbLog->_curFileSize < pStRmbLog->_para._maxFileSize)
{
return 0;
}
//文件大小促发滚动
pStRmbLog->_curFileNums += 1;
if (pStRmbLog->_curFileNums > pStRmbLog->_para._maxFileNum)
{
remove (pStRmbLog->_toDeleteFileName);
pStRmbLog->_curFileNums -= 1;
StDayInfo dayInfo;
FindNextDeleteLog (&dayInfo);
}
//rename
//CloseRmbLog();
rename (pStRmbLog->_logBaseFileName, pStRmbLog->_logFileName);
pStRmbLog->_curFileNo += 1;
snprintf (pStRmbLog->_logFileName, sizeof (pStRmbLog->_logFileName),
"%s_%d.log", pStRmbLog->_logBaseFileName,
pStRmbLog->_curFileNo);
//OpenRmbLog();
return 0;
}
return 0;
}