|
logger
提供的功能比简单的 print
语句更加强大和灵活。使用 logger
来记录信息有以下几个优点:
日志级别:logger
支持多种日志级别(如 DEBUG, INFO, WARNING, ERROR, CRITICAL),你可以根据信息的重要程度来选择合适的级别。这样可以根据需要过滤不同级别的日志输出,比如在生产环境中只显示错误及以上级别的日志。
多目的地:通过配置 handlers
,你可以将日志输出到不同的地方,例如控制台、文件、邮件、HTTP 端点等。而 print
语句通常只能输出到标准输出(通常是控制台)。
格式化:logger
可以通过 formatters
配置来定义日志的格式,包括时间戳、日志级别、模块名等,这使得日志更加结构化和易于阅读。
灵活性:你可以根据环境(开发、测试、生产)的不同,轻松地调整日志配置,甚至可以在运行时动态改变日志行为。
性能考虑:当禁用某个日志级别时,logger
会非常高效地忽略掉这些消息,不会产生额外的开销。相比之下,即使你不想看到 print
语句的信息,它仍然会被执行并消耗资源。
上下文信息:logger
可以方便地添加上下文信息,比如请求ID、用户ID等,这对于追踪问题特别有用。
因此,虽然 logger.info("some message")
和 print("some message")
在某些情况下看起来很相似,但是 logger
提供了更多的功能和更好的控制,适合于复杂的生产环境中的日志管理。对于自定义的日志记录,推荐使用 logging
模块而不是 print
语句。
要使用django的日志记录(使用python自带的Logoging模块)
第一步:
在setting.py中配置:
#日志
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
},
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'handlers': {
'console': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
'file': {
'level': 'INFO',
'class': 'logging.FileHandler',
'filename': '路径\django_app.log',#存放日志文件的路径,会自动生成这里定义的文件名,注意日志文件尽量不要放在django发布目录,并且确保django项目有写入权限
'formatter': 'verbose'
},
},
'loggers': {
'': { # 根日志记录器
'handlers': ['console', 'file'],
'level': 'DEBUG',
'propagate': True,
},
'django.db.backends': { # 数据库日志
'level': 'DEBUG',
'handlers': ['console'],
'propagate': True,
},
'celery_tasks': { # 特定的任务模块,这里的名称是app级的模块名
'level': 'DEBUG',
'handlers': ['console', 'file'],
'propagate': True,
},
},
}
第二步:
Django 会自动记录严重的错误,如 500 错误。
对于自定义的日志记录,需要你在代码中明确地使用 logging
模块来进行记录。
如果你想记录额外的信息,比如警告或调试细节,那么就需要在相关代码处加入相应的日志记录语句,类似用Print语句在控制台显示对应的信息效果。
在需要输出日志的视图或者函数页面,导入logging模块
import logging
# 获取日志记录器
logger = logging.getLogger(__name__)
然后在所需输出日志的代码中加入:
logger.warning("自定义信息")
或者:
logger.info(f"日志信息: {所需输出的变量信息}.")
或者:
try:
....................
except Exception as e:
logger.error(f"错误信息': {e}")
这样日志就会写入你定义的 'filename': '路径\django_app.log',文件中
----------------------------------------------------------------