我在 Flask 中有以下目录结构,我正在尝试向该系统添加日志记录。我的 API 在 main.py
中定义,backend.py
为 API 提供了一些后端逻辑。
├── README.md
├── __init__.py
├── main.py
├── module
│ ├── __init__.py
│ └── backend.py
我的API在main.py
中定义,文件中的日志相关组件如下:
from logging.config import dictConfig
import logging
from module import backend
log_level = "DEBUG"
LOGFILENAME = "flask.log"
dictConfig({
'version': 1,
'formatters': {'default': {
'format': '[%(asctime)s] {%(pathname)s:%(funcName)s:%(lineno)d} %(levelname)s - %(message)s',
}},
'handlers': {'default': {
'level': 'DEBUG',
'formatter': 'default',
'class': 'logging.handlers.RotatingFileHandler',
'filename': LOGFILENAME,
'maxBytes': 5000000,
'backupCount': 10
}},
'root': {
'level': log_level,
'handlers': ['default']
}
})
app = Flask(__name__)
logger = logging.getLogger(__name__)
@app.route('/')
def hello():
logger.debug("DEBUG: Inside the home function")
logger.info("INFO: Inside the home function")
backend.test()
return "Welcome"
日志记录在 main.py 中按预期工作。根据 log_level
,日志将写入 LOGFILENAME
。
当我尝试通过 backend.py 内的以下步骤启用日志记录时出现问题。
import logging
logger = logging.getLogger(__name__)
def test():
logger.info("info test")
logger.debug("debug test")
我没有看到 backend.py
的任何日志被写入 flask.log
。我感觉我错过了一些东西,但不明白是什么。任何帮助表示赞赏。
最佳答案
您的库确实有不同的记录器名称。对于两者,您需要具有相同的记录器名称。例如,参见the logging cookbook .
最佳实践是创建自己的日志记录层次结构,例如 main.py 中的“myapp”(logger =logging.getLogger(“myapp”)
)并在后端附加到此。 py 例如 myapp.backend
(logger =logging.getLogger(".".join("myapp", __name__))
。
在下面找到 main.py 和 backend.py 的稍微修改版本。我已经删除了 Flask 部分。我想这不会影响日志记录机制。
main.py
import logging.config
from module import backend
dict_config = {
'version': 1,
'formatters': {
'default': {
'format': '[%(asctime)s] {%(pathname)s:%(funcName)s:%(lineno)d} %(levelname)s - %(message)s',
}
},
'handlers': {'default': {
'level': 'DEBUG',
'formatter': 'default',
'class': 'logging.handlers.RotatingFileHandler',
'filename': "test.log",
'maxBytes': 5000000,
'backupCount': 10
},
'console': {
'class': 'logging.StreamHandler',
'level': 'DEBUG',
'formatter': 'default',
},
},
'loggers': {
'myapp': {
'handlers': ["default"],
'level': 'DEBUG',
},
},
'root': {
'handlers': ["console"],
'level': 'DEBUG',
},
}
print(__name__)
logger = logging.getLogger("myapp")
logging.config.dictConfig(dict_config)
def hello():
logger.debug("DEBUG: Inside the home function")
logger.info("INFO: Inside the home function")
backend.test()
return "Welcome"
print(hello())
后端.py
import logging
logger = logging.getLogger("myapp")
def test():
logger.info("info test")
logger.debug("debug test")
关于python - Flask 跨多个模块进行日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51852997/