http://davidbj.blog.51cto.com/4159484/1433741
日志在程序開發中是少不了的,通過日志我們可以分析到錯誤在什么地方,有什么異常。在生產環境下有很大的用途。在Java開發中通常用log4j,logback等第三方組件。那么在django中是怎么處理日志?django利用的就是Python提供的logging模塊,但django中要用logging,還得有一定的配置規則,需要在setting中設置。
-
logging模塊
logging模塊為應用程序提供了靈活的手段記錄事件、錯誤、警告和調試信息。對這些信息可以進行收集、篩選、寫入文件、發送給系統日志等操作,甚至還可以通過網絡發送給遠程計算機。
> 日志記錄級別
logging模塊的重點在於生成和處理日志消息。每條消息由一些文本和指示其嚴重性的相關級別組成。級別包含符號名稱和數字值。
級別 | 值 | 描述 |
CRITICAL | 50 | 關鍵錯誤/消息 |
ERROR | 40 | 錯誤 |
WARNING | 30 | 警告消息 |
INFO | 20 | 通知消息 |
DEBUG | 10 | 調試 |
NOTSET | 0 | 無級別 |
> 記錄器
記錄器負責管理日志消息的默認行為,包括日志記錄級別、輸出目標位置、消息格式以及其它基本細節。
關鍵字參數 | 描述 |
filename | 將日志消息附加到指定文件名的文件 |
filemode | 指定用於打開文件模式 |
format | 用於生成日志消息的格式字符串 |
datefmt | 用於輸出日期和時間的格式字符串 |
level | 設置記錄器的級別 |
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對象。另外還可以為每個處理器配置它自己的篩選和級別。
handlers.DatagramHandler(host,port):發送日志消息給位於制定host和port上的UDP服務器。
handlers.FileHandler(filename):將日志消息寫入文件filename。
handlers.HTTPHandler(host, url):使用HTTP的GET或POST方法將日志消息上傳到一台HTTP 服務器。
handlers.RotatingFileHandler(filename):將日志消息寫入文件filename。如果文件的大小超出maxBytes制定的值,那么它將被備份為filename1。
由於內置處理器還有很多,如果想更深入了解。可以查看官方手冊。
2.django 使用logging記錄日志
現在大概了解了logging的使用方法,現在可以結合django使用。
> 配置setting.py配置文件
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
76
77
78
79
80
81
82
83
84
85
86
87
|
#導入模塊
import
logging
import
django.utils.log
import
logging.handlers
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'
: {
},
'handlers'
: {
'mail_admins'
: {
'level'
:
'ERROR'
,
'class'
:
'django.utils.log.AdminEmailHandler'
,
'include_html'
:
True
,
},
'default'
: {
'level'
:
'DEBUG'
,
'class'
:
'logging.handlers.RotatingFileHandler'
,
'filename'
:
'/sourceDns/log/all.log'
,
#日志輸出文件
'maxBytes'
:
1024
*
1024
*
5
,
#文件大小
'backupCount'
:
5
,
#備份份數
'formatter'
:
'standard'
,
#使用哪種formatters日志格式
},
'error'
: {
'level'
:
'ERROR'
,
'class'
:
'logging.handlers.RotatingFileHandler'
,
'filename'
:
'/sourceDns/log/error.log'
,
'maxBytes'
:
1024
*
1024
*
5
,
'backupCount'
:
5
,
'formatter'
:
'standard'
,
},
'console'
:{
'level'
:
'DEBUG'
,
'class'
:
'logging.StreamHandler'
,
'formatter'
:
'standard'
},
'request_handler'
: {
'level'
:
'DEBUG'
,
'class'
:
'logging.handlers.RotatingFileHandler'
,
'filename'
:
'/sourceDns/log/script.log'
,
'maxBytes'
:
1024
*
1024
*
5
,
'backupCount'
:
5
,
'formatter'
:
'standard'
,
},
'scprits_handler'
: {
'level'
:
'DEBUG'
,
'class'
:
'logging.handlers.RotatingFileHandler'
,
'filename'
:
'/sourceDns/log/script.log'
,
'maxBytes'
:
1024
*
1024
*
5
,
'backupCount'
:
5
,
'formatter'
:
'standard'
,
}
},
'loggers'
: {
'django'
: {
'handlers'
: [
'default'
,
'console'
],
'level'
:
'DEBUG'
,
'propagate'
:
False
},
'django.request'
: {
'handlers'
: [
'request_handler'
],
'level'
:
'DEBUG'
,
'propagate'
:
False
,
},
'scripts'
: {
'handlers'
: [
'scprits_handler'
],
'level'
:
'INFO'
,
'propagate'
:
False
},
'sourceDns.webdns.views'
: {
'handlers'
: [
'default'
,
'error'
],
'level'
:
'DEBUG'
,
'propagate'
:
True
},
'sourceDns.webdns.util'
:{
'handlers'
: [
'error'
],
'level'
:
'ERROR'
,
'propagate'
:
True
}
}
}
|
解析:
1.formatters:配置打印日志格式
2.handler:用來定義具體處理日志的方式,可以定義多種,"default"就是默認方式,"console"就是打印到控制台方式。
3.loggers:用來配置用那種handlers來處理日志,比如你同時需要輸出日志到文件、控制台。
注意:
1.loggers類型為"django"這將處理所有類型日志。
2.sourceDns.webdns.views 應用的py文件
> views.py代碼配置
1
2
3
4
5
6
|
logger
=
logging.getLogger(
'sourceDns.webdns.views'
)
#剛才在setting.py中配置的logger
try
:
mysql
=
connectMysql(
'127.0.0.1'
,
'3306'
,
'david'
)
except
Exception,e:
logger.error(e)
#直接將錯誤寫入到日志文件
|