激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - Django日志模塊logging的配置詳解

Django日志模塊logging的配置詳解

2020-09-21 13:23laixintao Python

日志在程序開發(fā)中是少不了的,通過日志我們可以分析到錯誤在什么地方,有什么異常。在生產(chǎn)環(huán)境下有很大的用處。在java 開發(fā)中通常用 log4j,logback 等三方組件。下面這篇文章主要介紹了Django日志模塊logging的相關(guān)資料,需要的朋

前言

Django對于日志輸出的信息是很完善的,request的信息,setting配置,trackback的信息,一應(yīng)俱全,足夠我們調(diào)試了。但是在線上環(huán)境,如果讓用戶看到這些信息,是很不安全的(暴露代碼)。所以在線上我們要關(guān)閉Debug,但是又不能扔掉這些調(diào)試信息,這就要用到logging模塊。

logging模塊其實是Python的模塊,在Django中有很多本地化的支持。

理解Logger

首先要理解logging的工作,這里面主要有四個東西:格式器formatter,過濾器filter,處理器handler,日志實例logger。

處理流程

?
1
2
3
   formatter
logger ----> handler ----------------> files, emails
    filter

處理流程是這樣的。首先,在代碼中。我們拿到的是logger實例,通過這個實例來記錄信息。

?
1
2
3
4
5
6
7
8
9
10
11
# import the logging library
import logging
 
# Get an instance of a logger
logger = logging.getLogger('django')
 
def my_view(request, arg1, arg):
 ...
 if bad_mojo:
 # Log an error message
 logger.error('Something went wrong!')

然后,名字是django的這個logger就會把信息交給相應(yīng)的handler,handler把信息用formater和filter處理一下,提交log(保存到文件,數(shù)據(jù)庫,或者發(fā)送郵件)。

一般來說,handler可以是send_email,error_file等負責處理的方式,在logger中可以重復(fù)使用handler。例如我們的django處理器使用了send_email, error_file 這兩個處理器,request處理器使用error_file,info_file兩個處理器,logger和handler可以理解成多對多的關(guān)系,嘻嘻。

配置方式

Python中可以使用多種格式配置logging,比如.conf, .ini等。

在Django中,我們是把有關(guān)logging的配置寫到settings里面。相應(yīng)的配置及解釋如下(僅供參考)。

?
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
63
64
65
66
67
68
69
70
71
72
73
74
75
#管理員郵箱
ADMINS = (
 ('laixintao','*******@163.com'),
)
 
#非空鏈接,卻發(fā)生404錯誤,發(fā)送通知MANAGERS
SEND_BROKEN_LINK_EMAILS = True
MANAGERS = ADMINS
 
#Email設(shè)置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST= 'smtp.163.com'#QQ郵箱SMTP服務(wù)器(郵箱需要開通SMTP服務(wù))
EMAIL_PORT= 25 #QQ郵箱SMTP服務(wù)端口
EMAIL_HOST_USER = '**********@163.com' #我的郵箱帳號
EMAIL_HOST_PASSWORD = '**************' #授權(quán)碼
EMAIL_SUBJECT_PREFIX = 'website' #為郵件標題的前綴,默認是'[django]'
EMAIL_USE_TLS = True #開啟安全鏈接
DEFAULT_FROM_EMAIL = SERVER_EMAIL = EMAIL_HOST_USER #設(shè)置發(fā)件人
 
#logging日志配置
LOGGING = {
 'version': 1,
 'disable_existing_loggers': True,
 'formatters': {#日志格式
 'standard': {
  'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] [%(levelname)s]- %(message)s'}
 },
 'filters': {#過濾器
 'require_debug_false': {
  '()': 'django.utils.log.RequireDebugFalse',
  }
 },
 'handlers': {#處理器
 'null': {
  'level': 'DEBUG',
  'class': 'logging.NullHandler',
 },
 'mail_admins': {#發(fā)送郵件通知管理員
  'level': 'ERROR',
  'class': 'django.utils.log.AdminEmailHandler',
  'filters': ['require_debug_false'],# 僅當 DEBUG = False 時才發(fā)送郵件
  'include_html': True,
 },
 'debug': {#記錄到日志文件(需要創(chuàng)建對應(yīng)的目錄,否則會出錯)
  'level':'DEBUG',
  'class':'logging.handlers.RotatingFileHandler',
  'filename': os.path.join(BASE_DIR, "log",'debug.log'),#日志輸出文件
  'maxBytes':1024*1024*5,#文件大小
  'backupCount': 5,#備份份數(shù)
  'formatter':'standard',#使用哪種formatters日志格式
 },
 'console':{#輸出到控制臺
  'level': 'DEBUG',
  'class': 'logging.StreamHandler',
  'formatter': 'standard',
 },
 },
 'loggers': {#logging管理器
 'django': {
  'handlers': ['console'],
  'level': 'DEBUG',
  'propagate': False
 },
 'django.request': {
  'handlers': ['debug','mail_admins'],
  'level': 'ERROR',
  'propagate': True,
 },
 # 對于不在 ALLOWED_HOSTS 中的請求不發(fā)送報錯郵件
 'django.security.DisallowedHost': {
  'handlers': ['null'],
  'propagate': False,
 },
 }
}

以上的配置文件中,有三個日志處理器。分別是:

  1. ‘django.request':django的request發(fā)生error會自動記錄,然后使用debug將信息記錄到文件,還有mail_admins將信息通過郵件發(fā)送給管理員。這里郵件的功能非常棒!并不是一個純文本信息,而是一個html文件,和我們在瀏覽器看到的錯誤頁面一模一樣!要正常使用郵件功能需要像我一樣配置一下上面的郵件發(fā)件人信息。我是直接去網(wǎng)易申請了一個郵箱。要格外注意三點:1.一定要去郵件服務(wù)商開啟SMTP服務(wù);2.不同的郵件服務(wù)商可能有一些特殊的設(shè)置,比如網(wǎng)易,會給你一個客戶端授權(quán)碼,這個才是密碼,而不是網(wǎng)頁的登錄密碼。3 注意服務(wù)商有沒有對發(fā)信頻率的限制。
  2. ‘django':使用console處理器,將信息輸出。在開發(fā)的時候就可以使用這個處理器(什么?print? 太low了!)
  3. 最后一個處理器見注釋。

最后,不要忘了給日志的路徑響應(yīng)的權(quán)限。比如Apache2服務(wù)器,就需要給www-data寫權(quán)限:

?
1
2
sudo chown -R [yourname]:www-data [log]
sudo chmod -R g+s [log]

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久99国产精品久久 | 国产精品一区2区3区 | 亚洲欧美日韩免费 | 一二区成人影院电影网 | 午夜视频免费在线观看 | 国产精品视频亚洲 | 91九色视频观看 | 日本韩国欧美一级片 | 热久久91 | 日日摸夜夜添夜夜添牛牛 | 亚洲一区二区在线 | 草逼一区 | 久久精品.com | 中国久久久 | 黄色特级大片 | 高清做爰免费无遮网站挡 | 国内精品免费一区二区2001 | 日韩欧美精品中文字幕 | 欧美一级黄色片在线观看 | 毛片在线视频观看 | 国产九九热视频 | 精品一区二区三区免费毛片 | 黄色成人小视频 | 91丨九色丨国产在线观看 | 懂色粉嫩av久婷啪 | 天天躁狠狠躁夜躁2020挡不住 | 国产成人精品午夜视频' | 91av国产在线| 午夜久久久精品一区二区三区 | cosplay裸体福利写真 | 五月天堂av91久久久 | 看免费一级毛片 | 色视频一区二区 | 国产午夜精品久久久久久久蜜臀 | 国产一区二区精品在线观看 | 国产精品自拍av | 羞羞视频一区 | 天使萌一区二区三区免费观看 | 久色成人网 | 日韩精品久久久 | 成人爽a毛片免费啪啪红桃视频 |