python日志记录:使用环境变量替换dictconfig文件中的值

7d7tgy0s  于 2023-09-29  发布在  Python
关注(0)|答案(1)|浏览(114)

我正在使用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对象处理的,我猜有些事情是可能的。不幸的是,我没有找到一种方法来实现这一目标

ddarikpa

ddarikpa1#

在您的示例中,level: os.getenv("LOG_LEVEL")意味着将使用eval评估设置。这几乎总是一个坏主意。
如果uvicorn不提供环境变量替换,我想唯一的方法就是不使用uvicorn命令行,创建自己的main函数,并通过阅读YAML文件到dict来配置日志记录,遍历dict(递归地)并用os.path.expandvars更新所有值。
我的猜测是,在配置文件中使用envsubst将导致更紧凑的实现。

相关问题