优化日志

This commit is contained in:
2026-01-30 22:33:24 +08:00
parent 674f611d07
commit 4445567169

View File

@ -95,16 +95,15 @@ int cleanup(log_manager *self)
loc = self->log; loc = self->log;
self->log = NULL; self->log = NULL;
self->count = 0;//摘取log链 self->count = 0;//摘取log链
sem_post(&self->log_sem); sem_post(&self->log_sem);
//释放信号量 //释放信号量
char *logbuf; char *logbuf;
void *logbufbk; void *logbufbk;
char failback[MAX_LOG_LENGTH]; char failback[MAX_LOG_LENGTH];
logbuf = (char*)malloc(1); logbuf = (char*)malloc(1);
logbuf[0] = '\0'; logbuf[0] = '\0';
size_t buf_length,buf_lengthbk = 0; size_t buf_length,buf_lengthbk = 0;
int fd;
while(loc->next !=NULL) while(loc->next !=NULL)
{ {
tobeclean = loc; tobeclean = loc;
@ -114,6 +113,12 @@ int cleanup(log_manager *self)
logbuf = (char*)realloc(logbuf,strlen(logbuf)+strlen(tobeclean->log)+1);//为日志分配新的内存 logbuf = (char*)realloc(logbuf,strlen(logbuf)+strlen(tobeclean->log)+1);//为日志分配新的内存
} }
if(logbuf == NULL){ if(logbuf == NULL){
fd = open("log.txt",O_CREAT | O_WRONLY | O_APPEND, 0644);
if(fd != -1)
{
write(fd,logbufbk,buf_length);
close(fd);
}
free(logbufbk); free(logbufbk);
logbuf = failback;//降级策略,堆空间不足时,使用预分配栈空间,保留最后一条日志 logbuf = failback;//降级策略,堆空间不足时,使用预分配栈空间,保留最后一条日志
} }
@ -128,14 +133,6 @@ int cleanup(log_manager *self)
} }
free(tobeclean); free(tobeclean);
} }
int fd = open("log.txt",O_CREAT | O_WRONLY | O_APPEND, 0644);
if(fd == -1){
perror("file:");
free(loc);
if(logbuf != failback)
free(logbuf);
return -1;
}
if(logbuf != failback){ if(logbuf != failback){
logbufbk = logbuf; logbufbk = logbuf;
logbuf = (char*)realloc(logbuf,strlen(logbuf)+strlen(loc->log)+2); logbuf = (char*)realloc(logbuf,strlen(logbuf)+strlen(loc->log)+2);
@ -163,6 +160,14 @@ int cleanup(log_manager *self)
logbuf[buf_length] = '\0'; logbuf[buf_length] = '\0';
} }
free(loc); free(loc);
fd = open("log.txt",O_CREAT | O_WRONLY | O_APPEND, 0644);
if(fd == -1){
perror("file:");
if(logbuf != failback)
free(logbuf);
return -1;
}
int error_buf = write(fd,logbuf,strlen(logbuf)); int error_buf = write(fd,logbuf,strlen(logbuf));
if(error_buf==-1){ if(error_buf==-1){
close(fd); close(fd);