You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何关闭libcurl调用curl_easy_perform时产生的打印日志?

问题:如何关闭定时POST时Flask服务器输出的访问日志?

我用libcurl 8.5.0的curl_easy_perform接口定时向Flask服务器POST数据,相关代码如下:

// Set the URL of your Flask server: *this->port_* is port number, *api* is the name of web interface (sendData)
std::string url = "http://localhost:" + std::to_string(this->port_) + "/api/" + api;
curl_easy_setopt(curl_, CURLOPT_URL, url.c_str());

// Set the POST data string
curl_easy_setopt(curl_, CURLOPT_POSTFIELDS, data.c_str());
curl_easy_setopt(curl_, CURLOPT_POST, 1L);

// set this option to disable echo message
curl_easy_setopt(curl_, CURLOPT_WRITEFUNCTION, curi_cb);    // #1
curl_easy_setopt(curl_, CURLOPT_VERBOSE, 0L);               // #2

// write data callback, to nul
FILE *f = fopen("nul", "w");
curl_easy_setopt(curl_, CURLOPT_WRITEDATA, f);              // #3

// Perform the request
CURLcode res = curl_easy_perform(curl_);

// Check for errors
if(res!=CURLE_OK) {
    WLOG("curl_easy_perform() failed: ret=" << curl_easy_strerror(res));
}

每次发送数据时,控制台都会输出类似127.0.0.1 - - [08/Apr/2024 10:39:20] "POST /api/sendData HTTP/1.1" 200的日志行。我尝试了以下方案但都无效:

  • 设置CURLOPT_WRITEFUNCTION为回调函数(仅关闭了响应消息,没解决该打印行):
static size_t curl_cb(void* buffer, size_t size, size_t nmemb, void* lpVoid) {
    (void)buffer;
    (void)lpVoid;
    return size * nmemb;
}
  • 设置CURLOPT_VERBOSE为0;
  • 设置CURLOPT_WRITEDATA为null。

定时POST会频繁输出该日志导致控制台被占满,请问怎么关闭或禁用这个打印行?


问题根源

你看到的日志不是libcurl输出的,而是Flask内置的Werkzeug服务器输出的访问日志。所以修改libcurl的参数无法关闭它,需要从Flask端入手解决。

解决方法

方法1:修改Flask日志级别,屏蔽访问日志

在Flask代码中添加配置,将Werkzeug的访问日志级别调至错误级以上,或者直接禁用:

from flask import Flask
import logging

app = Flask(__name__)

# 获取Werkzeug日志实例,设置级别为ERROR(仅输出错误日志)
log = logging.getLogger('werkzeug')
log.setLevel(logging.ERROR)

# 或者直接完全禁用Werkzeug日志
# log.disabled = True

方法2:自定义请求处理器,跳过访问日志输出

重写Werkzeug的请求日志方法,让它不输出访问记录:

from flask import Flask
from werkzeug.serving import WSGIRequestHandler

app = Flask(__name__)

# 自定义处理器,重写日志方法
class SilentRequestHandler(WSGIRequestHandler):
    def log_request(self, code='-', size='-'):
        # 空实现,不输出访问日志
        pass

if __name__ == '__main__':
    app.run(request_handler=SilentRequestHandler)

方法3:启动时重定向输出(不推荐开发用)

如果是命令行启动Flask,可以直接将输出重定向到空设备,但会屏蔽所有Flask日志(包括错误日志):

# Linux/Mac
flask run --no-debugger --no-reload 2>&1 >/dev/null

# Windows
flask run --no-debugger --no-reload >nul 2>&1

内容的提问来源于stack exchange,提问作者user24093926

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 03:44:56