我正在使用uvicorn作为服务器运行FastAPI应用程序。为了使用尽可能少的代码并使用我的环境已经提供的工具,我在运行期间使用shell参数将日志配置传递给uvicorn,如下所示:
uvicorn --reload --log-config=logging_conf.yaml main:app
其中logging_conf.yaml只是以YAML格式编写的dictconfig文件。
这种方法很方便,因为在应用程序中,您可以直接获取记录器,而无需配置它,如下所示:
logger = logging.getLogger(__name__)
现在我想将应用程序停靠化,我想将日志级别更改为一些logger,只需使用环境变量。事
loggers:
uvicorn.access:
level: os.getenv("LOG_LEVEL")
handlers:
- access
propagate: no
考虑到文件是作为dict对象处理的,我猜有些事情是可能的。不幸的是,我没有找到一种方法来实现这一目标
1条答案
按热度按时间ddarikpa1#
在您的示例中,
level: os.getenv("LOG_LEVEL")
意味着将使用eval
评估设置。这几乎总是一个坏主意。如果uvicorn不提供环境变量替换,我想唯一的方法就是不使用uvicorn命令行,创建自己的
main
函数,并通过阅读YAML文件到dict来配置日志记录,遍历dict(递归地)并用os.path.expandvars
更新所有值。我的猜测是,在配置文件中使用
envsubst
将导致更紧凑的实现。