当前位置: 首页 > 知识库问答 >
问题:

gunicorn访问日志格式

乐钱青
2023-03-14

我正计划在库伯内特斯的gunicorn上运行flask。为了正确地进行日志记录,我希望用JSON输出所有日志。

access_log_format = '{"remote_ip":"%(h)s","request_id":"%({X-Request-Id}i)s","response_code":"%(s)s","request_method":"%(m)s","request_path":"%(U)s","request_querystring":"%(q)s","request_timetaken":"%(D)s","response_length":"%(B)s"}'

并且生成的日志是json格式的。但是消息部分(基于access_log_format的格式)现在包含转义双引号,并且不会被fluentd/ELK解析到单独的字段中

{"tags": [], "timestamp": "2017-12-07T11:50:20.362559Z", "level": "INFO", "host": "ubuntu", "path": "/usr/local/lib/python2.7/dist-packages/gunicorn/glogging.py", "message": "{\"remote_ip\":\"127.0.0.1\",\"request_id\":\"-\",\"response_code\":\"200\",\"request_method\":\"GET\",\"request_path\":\"/v1/records\",\"request_querystring\":\"\",\"request_timetaken\":\"19040\",\"response_length\":\"20\"}", "logger": "gunicorn.access"}

谢谢Jpw

共有1个答案

佘辰龙
2023-03-14

最简单的解决方案是如下所述,将外部单引号改为双引号,将内部双引号改为单引号。

--access-logformat  "{'remote_ip':'%(h)s','request_id':'%({X-Request-Id}i)s','response_code':'%(s)s','request_method':'%(m)s','request_path':'%(U)s','request_querystring':'%(q)s','request_timetaken':'%(D)s','response_length':'%(B)s'}"

以下是示例日志

{'remote_ip':'127.0.0.1','request_id':'-','response_code':'404','request_method':'GET','request_path':'/test','request_querystring':'','request_timetaken':'6642','response_length':'233'}
{'remote_ip':'127.0.0.1','request_id':'-','response_code':'200','request_method':'GET','request_path':'/','request_querystring':'','request_timetaken':'881','response_length':'20'}
 类似资料:
  • 配置项 { "access_log": [ { "path": "...", "format": "...", "filter": "{...}", }, ] } path (required, string) 写入访问日志的路径。 format (optional, string) 访问日志格式。Envoy支持自定义访问日志格式以及默

  • 配置 访问日志是HTTP连接管理器或TCP代理配置的一部分。 v1 API 参考 v2 API 参考 格式规则 访问日志格式字符串包含命令操作符或解释为普通字符串的其他字符。访问日志格式化程序不会做任何换行分隔符(如:“\n”),因此必须将其指定为格式字符串的一部分。请参阅示例的默认格式。请注意,访问日志行将为每个未设置/空值包含一个“-”字符。 访问日志的有些字段使用相同的格式字符串(如:HTT

  • HTTP连接管理器和tcp代理支持具有以下可扩展的访问日志记录功能: 每个连接管理器或tcp代理的任意数量的访问日志。 异步IO非阻塞架构。 访问日志记录不会阻塞主要的网络处理线程。 可定制的访问日志格式使用预定义的字段以及任意的HTTP请求和响应头。 可自定义的访问日志过滤器,允许将不同类型的请求和响应写入不同的访问日志。 访问日志配置。

  • 如果你想记录每一次请求信息,可开启访问日志,类似于apache的访问日志。注意:此日志量比较大,请注意磁盘容量。 将访问日志输出到当前应用的log4j日志: <dubbo:protocol accesslog="true" /> 将访问日志输出到指定文件: <dubbo:protocol accesslog="http://10.20.160.198/wiki/display/dubbo/foo

  • 如何在Spring webflux中自定义Reactor访问日志? 通过设置Dreactor,我可以打开reactor netty访问日志。内蒂。http。服务器accessLogEnabled=true 我想自定义格式,例如:我需要记录一些请求标头并删除IP地址。 在Spring Webflux应用程序中实现这一点的任何提示都会有所帮助。

  • 我试图访问kubernetes集群中的pod的日志,但在发送以下rest请求时获得: 获取api/名称空间/myNamespace/pods/myPod/log 当我试图查看pod的状态时,我得到以下信息: 为什么我拿不到日志?