python debug

django线上环境中的日志输出是相当重要的,它可以将所有的错误、警告、调试等重要信息全部输出到日志,这样便于维护和排查问题。
接下来本文会详细的介绍django logging配置,以及这些配置的含义与作用。
用到的东西,本文也会尽量详细的解答:
首先先来看看实际中配置:配置settings.py

写在最前
python manage.py runserver >> /home/aea/log/test.log 表示运行django时将console全部重定向到/home/aea/log/test.log
注意:这时你的django控制台的打印会一直是空白,因为已经全部重定向到/home/aea/log/test.log文件,,推荐在生产环境中使用,并关闭debug
保证你配置的所有log文件地址正确且文件存在,否则会报错!
DEBUG = False #线上环境时要关闭debug
ALLOWED_HOSTS = [’*’] #线上环境时要允许所有ip访问,或有自己的规则

#下面就是logging的配置
LOGGING = {
‘version’: 1, # 指明dictConnfig的版本,目前就只有一个版本,哈哈
‘disable_existing_loggers’: False, # 表示是否禁用所有的已经存在的日志配置
‘formatters’: { # 格式器
‘verbose’: { # 详细
‘format’: ‘%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s’
},
‘standard’: { # 标准
‘format’: ‘[%(asctime)s] [%(levelname)s] %(message)s’
},
},
# handlers:用来定义具体处理日志的方式,可以定义多种,"default"就是默认方式,"console"就是打印到控制台方式。file是写入到文件的方式,注意使用的class不同
‘handlers’: { # 处理器,在这里定义了两个个处理器
‘console’: {
‘level’: ‘DEBUG’,
‘class’: ‘logging.StreamHandler’,
‘stream’: ‘ext://sys.stdout’, # 文件重定向的配置,将打印到控制台的信息都重定向出去 python manage.py runserver >> /home/aea/log/test.log
# ‘stream’: open(’/home/aea/log/test.log’,‘a’), #虽然成功了,但是并没有将所有内容全部写入文件,目前还不清楚为什么
‘formatter’: ‘standard’ # 制定输出的格式,注意 在上面的formatters配置里面选择一个,否则会报错
},
‘file’: {
‘level’: ‘DEBUG’,
‘class’: ‘logging.FileHandler’,
‘filename’: ‘/home/aea/log/jwt_test.log’, #这是将普通日志写入到日志文件中的方法,
‘formatter’: ‘standard’
},
‘default’: {
‘level’:‘DEBUG’,
‘class’:‘logging.handlers.RotatingFileHandler’,
‘filename’: ‘/home/aea/log/all.log’, #日志输出文件
‘maxBytes’: 102410245, #文件大小
‘backupCount’: 5, #备份份数
‘formatter’:‘standard’, #使用哪种formatters日志格式
},
# 上面两种写入日志的方法是有区别的,前者是将控制台下输出的内容全部写入到文件中,这样做的好处就是我们在views代码中的所有print也会写在对应的位置
# 第二种方法就是将系统内定的内容写入到文件,具体就是请求的地址、错误信息等,小伙伴也可以都使用一下然后查看两个文件的异同。
},
‘loggers’: { # log记录器,配置之后就会对应的输出日志
# django 表示就是django本身默认的控制台输出,就是原本在控制台里面输出的内容,在这里的handlers里的file表示写入到上面配置的file-/home/aea/log/jwt_test.log文件里面
# 在这里的handlers里的console表示写入到上面配置的console-/home/aea/log/test.log文件里面
‘django’: {
‘handlers’: [‘console’,‘file’],
# 这里直接输出到控制台只是请求的路由等系统console,当使用重定向之后会把所有内容输出到log日志
‘level’: ‘DEBUG’,
‘propagate’: True,
},
'django.request ':{
‘handlers’: [‘console’,‘file’],
‘level’: ‘WARNING’, # 配合上面的将警告log写入到另外一个文件
‘propagate’: True,
},
‘django.db.backends’: {
‘handlers’: [‘file’], # 指定file handler处理器,表示只写入到文件
‘level’:‘DEBUG’,
‘propagate’: True,
},
},
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
下面是对参数和配置的解释
level:级别
一个记录器是日志系统的一个实体,每一个记录器是一个已经命名好的可以将消息为进程写入的“桶”。
每一个记录器都会有一个日志等级,每个等级描述了记录器即将处理的信息的严重性,python定义了以下六个等级:
级别 值 描述
CRITICAL 50 关键错误/消息,描述已经发生的严重问题
ERROR 40 错误,描述已经发生的主要问题
WARNING 30 警告消息,描述已经发生的小问题
INFO 20 通知消息,普通的系统信息列表内容
DEBUG 10 调试,出于调试目的的低层次系统信息
NOTSET 0 无级别

处理器/记录器 关键字参数:
关键字参数 描述
filename 将日志消息附加到指定文件名的文件
filemode 指定用于打开文件模式, 文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
format 用于生成日志消息的格式字符串
datefmt 用于输出日期和时间的格式字符串
level 设置记录器的级别
propagate 可以基于每个记录器控制该传播。 如果您不希望特定记录器传播到其父项,则可以关闭此行为。
stream 提供打开的文件,用于把日志消息发送到文件。可以指定输出到sys.stderr,sys.stdout或者文件,默认为sys.stderr。
若同时列出了filename和stream两个参数,则stream参数会被忽略。

format: 日志消息格式
格式 描述
%(name)s 记录器的名称
%(levelno)s 数字形式的日志记录级别
%(levelname)s 日志记录级别的文本名称
%(filename)s 执行日志记录调用的源文件的文件名称
%(pathname)s 执行日志记录调用的源文件的路径名称
%(funcName)s 执行日志记录调用的函数名称
%(module)s 执行日志记录调用的模块名称
%(lineno)s 执行日志记录调用的行号
%(created)s 执行日志记录的时间
%(asctime)s 日期和时间
%(msecs)s 毫秒部分
%(thread)d 线程ID
%(threadName)s 线程名称
%(process)d 进程ID
%(message)s 记录的消息

内置处理器
logging模块提供了一些处理器,可以通过各种方式处理日志消息。使用addHandler()方法将这些处理器添加给Logger对象。另外还可以为每个处理器配置它自己的筛选和级别。
logging.StreamHandler 可以向类似与sys.stdout或者sys.stderr的任何文件对象(file object)输出信息
logging.FileHandler 将日志消息写入文件filename。
logging.handlers.DatagramHandler(host,port) 发送日志消息给位于制定host和port上的UDP服务器。使用UDP协议,将日志信息发送到网络
logging.handlers.HTTPHandler(host, url) 使用HTTP的GET或POST方法将日志消息上传到一台HTTP 服务器。
logging.handlers.RotatingFileHandler(filename) 将日志消息写入文件filename。如果文件的大小超出maxBytes制定的值,那么它将被备份为filenamel。
logging.handlers.SocketHandler 使用TCP协议,将日志信息发送到网络。
logging.handlers.SysLogHandler 日志输出到syslog
logging.handlers.NTEventLogHandler 远程输出日志到Windows NT/2000/XP的事件日志
logging.handlers.SMTPHandler 远程输出日志到邮件地址
logging.handlers.MemoryHandler 日志输出到内存中的制定buffer
注意:由于内置处理器还有很多,如果想更深入了解。可以查看官方手册。

django提供的内置记录器
django 在Django层次结构中的所有消息记录器。没有使用此名称发布消息,而是使用下面的记录器之一。
django.request 与请求处理相关的日志消息。5xx响应被提升为错误消息;4xx响应被提升为警告消息。
django.server 与由RunServer命令调用的服务器所接收的请求的处理相关的日志消息。HTTP 5XX响应被记录为错误消息,4XX响应被记录为警告消息,其他一切都被记录为INFO。
django.template 与模板呈现相关的日志消息
django.db.backends 有关代码与数据库交互的消息。例如,请求执行的每个应用程序级SQL语句都在调试级别记录到此记录器。

部署生产环境建议使用的方法
很多时候我们在代码中会增加很多print 来打印一些调试和测试的内容,默认情况下这些内容全部打印在控制台。
问题是生产环境上,进程都是后台运行的,所有我们可以使用,将控制台打印的所有内容全部重定向到日志文件即可。
参考我上面的配置,在console的handler中配置了‘stream’: ‘ext://sys.stdout’,
它会将我们的控制台输出全部重定向写入到文件中去。
命令是:
这条命令含义是:在后台运行进程,并将所有的控制台输出全部重定向到文件

nohup python manage.py runserver >>/home/aea/log/test.log &

作者:haeasringnar
来源:CSDN
原文:https://blog.csdn.net/haeasringnar/article/details/82053714
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值