我有一个docker容器运行日志记录,通过udp将gelf记录到日志记录实例——一切正常
该容器基于ubuntu18,其中rsyslog作为服务运行,运行良好
容器中有一个运行着uvicornwebserver的FastAPI应用程序。它也可以完美地工作,并且uvicorn可以完美地记录到日志实例
下面是不起作用的,但通常适用于非FastAPI python项目的内容。我使用python的syslog记录更多内容
带有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"}
日志实例上的日志不显示syslog消息。仅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的日志文件,其中包含syslog消息:
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忽略系统日志造成的。不过,可以识别python中的简单打印
解决方案:我用python为自己构建了一个日志函数,它将登录到syslog并打印出我想要记录的任何内容
相关问题 更多 >
编程相关推荐