Django LOGGING未打印到控制台和文件



我遇到了Django Loggers的一个奇怪行为。

我正在使用Django开发一个前端应用程序。在登录服务期间,我向某些组件发出一些请求,并使用log.warning((调用来查看请求流。

日志工作得很好,直到我决定添加一个LOGGING配置来在文件中打印日志的输出,因为我想通过Docker部署应用程序,并且我想定期检查日志文件。

当我添加以下关于日志的Django配置时:

LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'detailed': {
'class': 'logging.Formatter',
'format': "[%(asctime)s] - [%(name)s:%(lineno)s] - [%(levelname)s] %(message)s",
}
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'level': 'INFO',
'formatter': 'detailed',
},
'file': {
'class': 'logging.handlers.RotatingFileHandler',
'filename': "{}/am.log".format(BASE_DIR),
'mode': 'w',
'formatter': 'detailed',
'level': 'INFO',
'maxBytes': 2024 * 2024,
'backupCount': 5,
},
},
'loggers': {
'am': {
'level': 'INFO',
'handlers': ['console', 'file']
},
}
}

日志记录停止工作。日志记录配置中指定的文件am.log确实已创建,但没有任何内容打印到该文件中。甚至控制台日志记录也不会发生。

我从我的一个Django项目中获得了这个日志记录配置,用于这个应用程序的后端,在那里它可以完美地工作。我真的不明白我做错了什么。你能帮助我或指引我朝正确的方向走吗。我将不胜感激。

祝大家今天过得愉快!

通过在'loggers'配置中使用键"am",您定义了一个名为"am"的记录器:

'loggers': {
'am': {   #  <-- name of the logger
'level': 'INFO',
'handlers': ['console', 'file']
},
}

因此,要使用该记录器,您必须使用该名称:

logger = logging.getLogger("am")
logger.warning("This is a warning")

如果你用你正在运行的模块的名称来命名你的记录器,这是推荐的做法,那么你需要定义每个模块记录器:

logger = logging.getLogger(__name__)  # <-- this logger will be named after the module, e.g. your app name.

然后在您的日志配置中,您可以指定每个模块(每个应用程序(的日志行为:

'loggers': {
'my_app': {  # <-- logging for my app
'level': 'INFO',
'handlers': ['console', 'file']
},
'django': {   # <-- logging for Django module
'level': 'WARNING',
'handlers': ['console', 'file']
},
}

或者,如果您只想记录所有内容,请使用根(''(记录器,它没有名称,只是空字符串:

'loggers': {
'': {   # <-- root logger
'level': 'INFO',
'handlers': ['console', 'file']
},
}

最新更新