https://nginx.org/en/docs/http/ngx_http_core_module.html#var_request_id
server {
listen 80;
server_name example.com;
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'Request-ID: $request_id';
add_header X-Request-ID $request_id;
location / {
proxy_pass http://backend_server;
proxy_set_header X-Request-ID $request_id;
}
}
后台服务接收到 X-Request-ID 头信息,并记录到日志中。
可以放到线程上下文,或者协程上下文中,在所有相关日志打印时都带上 X-Request-ID。
from flask import Flask, request
import logging
app = Flask(__name__)
logging.basicConfig(level=logging.INFO)
@app.route('/')
def hello():
request_id = request.headers.get('X-Request-ID')
logging.info(f"Request ID: {request_id} - Processing request...")
return 'Hello, World!'
if __name__ == '__main__':
app.run()