Ejemplo n.º 1
0
Archivo: log.c Proyecto: dolfly/merry
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;
}
Ejemplo n.º 2
0
Archivo: log.c Proyecto: millken/merry
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;
}
Ejemplo n.º 3
0
Archivo: log.c Proyecto: dolfly/merry
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;
}