flask - Python Flask 记录到多个文件
问题描述
我有一个烧瓶应用程序,它从 2 个不同的文件中调用 2 个函数。我已将日志记录设置到 2 个不同的文件。但是,日志记录似乎总是附加到一个文件(无论哪个端点首先命中)
这是文件的结构 -
- 应用程序.py
from file1 import fun1
from file2 import fun2
@app.route("/end_point1")
def data_1:
return fun1()
@app.route("/end_point2")
def data_2:
return fun2()
- 文件1.py
import logging
def fun1:
logging.basicConfig(filename = "file1.log")
logging.info("Logging function 1 details to to file1")
return foo
- 文件2.py
def fun2:
logging.basicConfig(filename = "file2.log")
logging.info("Logging function 2 details to to file2")
return bar
当我运行单个 python 文件 - file1.py / file2.py 时,这记录很好(单独)但是当我运行 API 时,日志只附加到一个文件中。
我在日志记录方面做错了什么?我该如何解决?
解决方案
将此添加到 logger_setup.py
import logging
from pathlib import Path
formatter = logging.Formatter('%(asctime)s - %(levelname)s - [%(filename)s:%(lineno)d] - %(message)s')
def setup_logger( name, log_file, level=logging.DEBUG):
my_file = Path(log_file)
# print("check the if condition for the file")
# print(my_file.is_file())
if my_file.is_file():
#print(logging.getLogger(name).hasHandlers())
# if logging.getLogger(name).hasHandlers():
if len(logging.getLogger(name).handlers)>0:
return logging.getLogger(name)
else:
handler = logging.FileHandler(log_file, mode='a')
handler.setFormatter(formatter)
logger = logging.getLogger(name)
logger.setLevel(level)
logger.addHandler(handler)
logger.propagate = False
return logger
else:
handler = logging.FileHandler(log_file, mode='a')
handler.setFormatter(formatter)
logger = logging.getLogger(name)
logger.setLevel(level)
logger.addHandler(handler)
logger.propagate = False
return logger
在 file1 和 2 中,您可以使用类似这样的内容
import logging
import logger_setup
def fun1():
log_location = 'logs'
logger = logger_setup.setup_logger(__name__,log_location+__name__+'.log')
logger.info("Logging function 1 details to to file1")
return "1"
推荐阅读
- google-data-studio - 如何隐藏 Google Data Studio 登陆页面上的模板库?
- java - 单一表单中具有不同 API 的 JSP 多个按钮
- math - 用幂函数改变一系列数字的分布
- memory-management - 为什么 x86 64bits 平台上有这么多免费的可移动 DMA32 块?
- javascript - 通过 javascript 将索引动态分配给 Razor 模型
- reactjs - 涉及redux状态和空依赖数组时何时调用useCallback?
- mysql - 从查询中排序数据
- c# - 如何从以相同名称开头的不同行获取数据?
- asp.net-core - 在 Blazor 中绑定到 ExpandoObject
- nestjs - 如何将 NestJS 与“express”无服务器组件一起使用