日志:
logging,非常不错,也很详细(首推,查看,配置解读,使用方法,问题处理):https://www.cnblogs.com/xuzijie/p/9679707.html
很详细,以及使用7种方法,另外有,设计邮箱等日志:https://blog.csdn.net/weixin_37590093/article/details/81536372
小例子:https://blog.csdn.net/clh604/article/details/9282651
也不错,文字少:https://www.cnblogs.com/zhangqunshi/p/6641173.html
使用举例:
在要用log的view.py里面,如果想用django这个日志,则
log=logging.getLogger('django')
log.error(“日志内容”)
如果,想要在日志内容里面传递变量,怎么办?
log.error(" %s : execute %s failed",变量1,变量2),比较像c的printf,还是很方便的。
settings.py内配置信息:
# log settings
# 日志的文字日志级别,由低到高分别为:DEBUG -> INFO -> WARNING -> ERROR -> CRITICAL
# 日志的数字日志级别,由低到高分别为: 10 -> 20 -> 30 -> 40 -> 50
# formatters: 指定输出的格式,被handler使用
# handlers:实际上来处理日志记录的地方。指定输出到控制台还是文件中还是其他..,以及输出的方式。被logger引用
# loggers: 指定django中的每个模块使用哪个handlers。以及日志输出的级别
# filters: 是在信息从logger传递到handler的过程中实施一些过滤行为,没有默认情况: 任何达到log level的日志信息都会被处理
# 注意:日志的输出级别是由loggers中的每个模块中level选项定义。如果没有配置,那么默认为warning级别
LOGGING = {
'version': 1,
'disable_existing_loggers': True, # 默认True,默认的配置就会被禁用.但官方说这样可能有意外结果
'formatters': {
'standard': {
# asctime: 时间(年月日时分秒毫秒)
# threadName: 线程名, thread: 线程ID
# processName: 进程名称, process: 进程ID
# name: 日志器名称(用loggers的哪个)
# lineno: 数字日志级别, levelname: 文字日志级别
# message: 日志文本内容
'format': '%(asctime)s [%(processName)s:%(process)d] [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(levelname)s]- %(message)s'
},
},
'filters': {
# 'require_debug_true': {
# '()': 'django.utils.log.RequireDebugTrue',
# },
},
'handlers': {
# 'mail_admins': {
# 'level': 'ERROR',
# 'class': 'django.utils.log.AdminEmailHandler',
# 'include_html': True,
# },
'file': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(BASE_DIR + '/logs/', 'all.log'), # 或者直接写路径:'c:\logs\all.log',
'maxBytes': 1024 * 1024 * 5, # 5 MB
'backupCount': 5,
'formatter': 'standard',
},
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'standard'
},
'request_handler': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(BASE_DIR + '/logs/', 'request.log'), # 或者直接写路径:'filename':'c:\logs\request.log''
'maxBytes': 1024 * 1024 * 5, # 5 MB
'backupCount': 5,
'formatter': 'standard',
},
# 'scprits_handler': {
# 'level': 'DEBUG',
# 'class': 'logging.handlers.RotatingFileHandler',
# 'filename': os.path.join(BASE_DIR + '/logs/', 'script.log'), # 或者直接写路径:'filename':'c:\logs\script.log'
# 'maxBytes': 1024 * 1024 * 5, # 5 MB
# 'backupCount': 5,
# 'formatter': 'standard',
# },
},
'loggers': {
# loggers,日志器,是有层级关系的
# propagate属性值为1或True,则表示日志消息将会被输出到处理器指定的位置,
# 同时还会被传递给parent日志器的handlers进行处理直到当前日志器的propagate属性为0停止,
# 如果propagate值为0或False,则表示不向parent日志器的handlers传递该消息,到此结束。
'django': { # 文件形式, 控制台形式
'handlers': ['file', 'console'],
'level': 'INFO',
'propagate': False
},
'django.request': {
'handlers': ['request_handler'],
'level': 'DEBUG',
'propagate': False
},
# 'scripts': { # 脚本专用日志
# 'handlers': ['scprits_handler'],
# 'level': 'INFO',
# 'propagate': False
# },
}
}