windows下zlog输出日志长度只能在1024下解决方法

windows版本:https://github.com/lopsd07/WinZlog

在windows下面有个问题不能打印1024及以上长度的字符。

主要问题在于:buf.c中243行左右,nwrite = vsnprintf(a_buf->tail, size_left, format, ap);
在linux下面,当数据ap的长度大于size_left(缓冲区的大小)的长度的时候,返回的是实际字符的长度,而在windows下面,实际的长度超过了size_left的时候,就会返回-1,表示超出缓冲区的长度。
这样在后面的nwrite的判断里面就会出错。
可以做如下的修改:

#define BUFFER_INTREVAL 1024

#ifdef _MSC_VER
    if (nwrite < 0 && a_buf->size_max > 0) {
        for (int buffer_size = size_left + BUFFER_INTREVAL; buffer_size <= a_buf->size_max;)
        {
            char *buffer = malloc(buffer_size);
            if (buffer == NULL) {
                break;
            }
            if ((nwrite = vsnprintf(buffer, buffer_size, format, ap)) >= 0)
            {
                free(buffer);
                buffer = NULL;
                break;
            }
            buffer_size += BUFFER_INTREVAL;
            free(buffer);
            buffer = NULL;
        }
    }
#endif 

可以定义一个1024的长度增长空间,然后通过返回-1的时候,申请内存和释放内存,只到得到合适的内存空间即可。

你可能感兴趣的:(c++)