uvicorn 抑制 python 的 gelf 驱动程序系统日志
uvicorn suppresses python's syslog for gelf driver
我有一个 docker 容器 运行 通过 udp 使用 gelf 登录到一个日志实例 --一切顺利!
容器基于Ubuntu 18,其中rsyslog是运行作为服务,可以正常工作嗯。
容器内部是一个 FastAPI 应用程序 运行 uvicorn 网络服务器。它也可以完美地工作并且 uvicorn 可以完美地记录到日志记录实例。
这是不起作用的,但通常适用于非 FastAPI python 项目。我使用 python 的 syslog 来记录更多内容。
带有系统日志的应用程序如下所示(我创建了一个简单的示例来为自己调试):
from fastapi import FastAPI
import syslog
syslog.openlog(facility=syslog.LOG_LOCAL0)
app = FastAPI()
syslog.syslog(syslog.LOG_INFO, 'startup done')
@app.get("/")
async def root():
syslog.syslog(syslog.LOG_INFO, 'get hello')
return {"message": "Hello World"}
记录实例的日志不显示系统日志消息。只有 uvicorn 的消息:
INFO: Started server process [21]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:80 (Press CTRL+C to quit)
INFO: 172.17.0.1:35346 - "GET / HTTP/1.1" 200 OK
为了进一步调试,我检查了 rsyslog 的日志文件,它包含系统日志消息:
Dec 23 17:21:39 /uvicorn: startup done
Dec 23 17:21:50 /uvicorn: get hello
这里是 /etc/rsyslog.d
的 rsyslog 配置
local0.* {
action(type="omfile" file="/var/log/test.log" fileOwner="syslog" fileGroup="syslog" fileCreateMode="0640")
stop
}
我在这里错过了什么?
为什么 gelf 忽略 rsyslog?
关于系统日志,我需要了解有关 uvicorn 的哪些内容?
或者我能做什么?
谢谢
问题是由于 gelf 忽略了 syslog。 python 中的简单打印将被识别。
解决方案:我在 python 中为自己构建了一个日志功能,它将记录到系统日志并打印出我想要记录的任何内容。
我有一个 docker 容器 运行 通过 udp 使用 gelf 登录到一个日志实例 --一切顺利!
容器基于Ubuntu 18,其中rsyslog是运行作为服务,可以正常工作嗯。
容器内部是一个 FastAPI 应用程序 运行 uvicorn 网络服务器。它也可以完美地工作并且 uvicorn 可以完美地记录到日志记录实例。
这是不起作用的,但通常适用于非 FastAPI python 项目。我使用 python 的 syslog 来记录更多内容。
带有系统日志的应用程序如下所示(我创建了一个简单的示例来为自己调试):
from fastapi import FastAPI
import syslog
syslog.openlog(facility=syslog.LOG_LOCAL0)
app = FastAPI()
syslog.syslog(syslog.LOG_INFO, 'startup done')
@app.get("/")
async def root():
syslog.syslog(syslog.LOG_INFO, 'get hello')
return {"message": "Hello World"}
记录实例的日志不显示系统日志消息。只有 uvicorn 的消息:
INFO: Started server process [21]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:80 (Press CTRL+C to quit)
INFO: 172.17.0.1:35346 - "GET / HTTP/1.1" 200 OK
为了进一步调试,我检查了 rsyslog 的日志文件,它包含系统日志消息:
Dec 23 17:21:39 /uvicorn: startup done
Dec 23 17:21:50 /uvicorn: get hello
这里是 /etc/rsyslog.d
的 rsyslog 配置local0.* {
action(type="omfile" file="/var/log/test.log" fileOwner="syslog" fileGroup="syslog" fileCreateMode="0640")
stop
}
我在这里错过了什么? 为什么 gelf 忽略 rsyslog? 关于系统日志,我需要了解有关 uvicorn 的哪些内容? 或者我能做什么?
谢谢
问题是由于 gelf 忽略了 syslog。 python 中的简单打印将被识别。
解决方案:我在 python 中为自己构建了一个日志功能,它将记录到系统日志并打印出我想要记录的任何内容。