int sync_logs(logf_t *_logf) { if(!_logf || _logf->LOG_FD == -1) { return 0; } if(_logf->split_by) { int dosplit = 0; time_t old = now; if(_logf->split_by == 'h' && _logf->last_split_tm.tm_hour != _now_lc.tm_hour) { dosplit = 1; old -= _logf->auto_delete * 3600; } else if(_logf->split_by == 'd' && _logf->last_split_tm.tm_mday != _now_lc.tm_mday) { dosplit = 1; old -= _logf->auto_delete * 86400; } else if(_logf->split_by == 'w' && _logf->last_split_tm.tm_wday != _now_lc.tm_wday) { dosplit = 1; old -= _logf->auto_delete * 604800; } else if(_logf->split_by == 'm' && _logf->last_split_tm.tm_mon != _now_lc.tm_mon) { dosplit = 1; old -= _logf->auto_delete * 2592000; } if(dosplit && _logf->file) { sprintf(buf_4096, "%s-%04d-%02d-%02d-%02d", _logf->file, _now_lc.tm_year + 1900, _now_lc.tm_mon + 1, _now_lc.tm_mday, _now_lc.tm_hour); if(rename(_logf->file, buf_4096) == 0) { close(_logf->LOG_FD); localtime_r(&now, &_logf->last_split_tm); _logf->LOG_FD = open(_logf->file, O_APPEND | O_CREAT | O_WRONLY, 0644); } if(_logf->auto_delete > 0) { struct tm _old_lc = {0}; localtime_r(&old, &_old_lc); sprintf(buf_4096, "rm -f %s-%04d-%02d-%02d-%02d &", _logf->file, _old_lc.tm_year + 1900, _old_lc.tm_mon + 1, _old_lc.tm_mday, _old_lc.tm_hour); FILE *fp = popen(buf_4096, "r"); pclose(fp); } } } copy_buf_to_shm_log_buf(_logf); int n = 0; if(*_logf->log_buf_len > 0) { n = write(_logf->LOG_FD, _logf->log_buf, *_logf->log_buf_len); *_logf->log_buf_len = 0; } return n; }
int sync_logs(logf_t *_logf) { if(!_logf || _logf->LOG_FD == -1) { return 0; } if(_logf->split_by) { int dosplit = 0; if(_logf->split_by == 'h' && _logf->last_split_tm.tm_hour != _now_lc.tm_hour) { dosplit = 1; } else if(_logf->split_by == 'd' && _logf->last_split_tm.tm_mday != _now_lc.tm_mday) { dosplit = 1; } else if(_logf->split_by == 'w' && _logf->last_split_tm.tm_wday != _now_lc.tm_wday) { dosplit = 1; } else if(_logf->split_by == 'm' && _logf->last_split_tm.tm_mon != _now_lc.tm_mon) { dosplit = 1; } if(dosplit && _logf->file) { sprintf(buf_4096, "%s-%04d-%02d-%02d-%02d", _logf->file, _now_lc.tm_year + 1900, _now_lc.tm_mon + 1, _now_lc.tm_mday, _now_lc.tm_hour); if(rename(_logf->file, buf_4096) == 0) { close(_logf->LOG_FD); localtime_r(&now, &_logf->last_split_tm); _logf->LOG_FD = open(_logf->file, O_APPEND | O_CREAT | O_WRONLY, 0644); } } } copy_buf_to_shm_log_buf(_logf); int n = 0; if(*_logf->log_buf_len > 0) { n = write(_logf->LOG_FD, _logf->log_buf, *_logf->log_buf_len); *_logf->log_buf_len = 0; } return n; }
int log_writef(logf_t *_logf, const char *fmt, ...) { if(!_logf || _logf->LOG_FD == -1) { return 0; } va_list args; va_start(args, fmt); int n = vsnprintf(buf_4096, 4096, fmt, args); va_end(args); update_time(); if(now > _logf->last_wtime || _logf->_inner_log_buf_len + n >= LOG_BUF_SIZE) { _logf->last_wtime = now; copy_buf_to_shm_log_buf(_logf); } memcpy(_logf->_inner_log_buf + _logf->_inner_log_buf_len, buf_4096, n); _logf->_inner_log_buf_len += n; return n; }