摘要:下面介紹一下開(kāi)發(fā)中如何將日志輸出到文件中。錯(cuò)誤,表示出現(xiàn)了某種錯(cuò)誤。崩潰,出現(xiàn)了嚴(yán)重級(jí)別的錯(cuò)誤。如果日志的信息級(jí)別比的低,那么就會(huì)忽略這條日志。還運(yùn)行咱們?cè)谔幚碇靶薷娜罩?,例如降低或者提高日志的?jí)別。
在生產(chǎn)環(huán)境中,將程序的運(yùn)行日志輸出保存到文件中是很必要的操作;當(dāng)應(yīng)用崩潰時(shí),很容易通過(guò)查找日志來(lái)定位問(wèn)題。下面介紹一下django開(kāi)發(fā)中如何將日志輸出到文件中。
首先看一下日志級(jí)別有哪些:
DEBUG:所有等級(jí)中最低,其信息一般用來(lái)作為調(diào)試的輔助信息 INFO:程序的一般信息 WARNING:警告,通常用來(lái)對(duì)某些可能出現(xiàn)的錯(cuò)誤且不會(huì)影響程序正常運(yùn)行的信息進(jìn)行警告。 ERROR:錯(cuò)誤,表示出現(xiàn)了某種錯(cuò)誤。 CRITICAL:崩潰,出現(xiàn)了嚴(yán)重級(jí)別的錯(cuò)誤。
在django項(xiàng)目中使用logging模塊打印日志的步驟如下:
1.導(dǎo)入模塊 import logging 2.設(shè)置日志等級(jí) logging.basicConfig(level=logging.DEBUG) 3.獲取logger對(duì)象 logger = logging.getLogger(__name__) 4.打印日志 logger.debug("logger日志"),還有l(wèi)ogger.info(),logger.warning()等方法
下面介紹一下logging中的四個(gè)組件,如下:
1.Loggers 2.Handlers 3.Filters 4.Formatters
Loggers(日志記錄器),系統(tǒng)中的每一條日志都是由該組件進(jìn)行記錄的,每一個(gè)記錄器都應(yīng)該有其自己的名稱并標(biāo)記其最低記錄的等級(jí);當(dāng)一條日志給到logger時(shí),logger會(huì)對(duì)該條信息的級(jí)別與自身的級(jí)別進(jìn)行比較,如果該日志級(jí)別不低于本身級(jí)別,logger就會(huì)進(jìn)行下一步操作。如果日志的信息級(jí)別比logger的低,那么就會(huì)忽略這條日志。
當(dāng)logger經(jīng)過(guò)級(jí)別的比較之后決定要對(duì)某條日志進(jìn)行處理時(shí),就將該條日志交給了Handlers
Handlers(處理器),用來(lái)處理具體每條信息,例如是將日志打印到屏幕還是記錄到文件或者發(fā)送至某個(gè)網(wǎng)絡(luò)連接;它自己的記錄級(jí)別,如果日志級(jí)別低于handler的級(jí)別,handler同樣會(huì)忽略掉該條日志。
Filter(過(guò)濾器):提供了傳遞給handler之前的附加功能。在通常情況下,一條日志信息只要達(dá)到logger的級(jí)別之后就會(huì)傳遞給handler處理,但是我們可以通過(guò)使用filter來(lái)對(duì)日志進(jìn)行額外的過(guò)濾。
例如我們可以使用某個(gè)filter來(lái)控制只允許某個(gè)特定的源的ERROR級(jí)別的日志。
Filter還運(yùn)行咱們?cè)谔幚碇靶薷娜罩?,例如降低或者提高日志的?jí)別。
Filter可以在logger和handler中同時(shí)使用,而且多個(gè)filter會(huì)同時(shí)工作。
Formatter(格式化):定義了怎么顯示內(nèi)容,因?yàn)樽罱K的日志都會(huì)是以文本的形式展現(xiàn),formatter就是描述怎么來(lái)做這件事。formatter通常都是使用python格式化字符串的方法來(lái)對(duì)日志進(jìn)行格式化
最后看一個(gè)日志配置的例子:
logger.py: import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) BASE_LOG_DIR = os.path.join(BASE_DIR, "logs") LOGGING = { "version": 1, # 保留的參數(shù),默認(rèn)是1 "disable_existing_loggers": False, # 是否禁用已經(jīng)存在的logger實(shí)例 # 日志輸出格式的定義 "formatters": { "standard": { # 標(biāo)準(zhǔn)的日志格式化 "format": "%(levelname)s %(asctime)s %(module)s %(message)s" }, "error": { # 錯(cuò)誤日志輸出格式 "format": "%(levelname)s %(asctime)s %(pathname)s %(module)s %(message)s" }, "simple": { "format": "%(levelname)s %(asctime)s %(message)s" }, "collect": { "format": "%(message)s" } }, # 處理器:需要處理什么級(jí)別的日志及如何處理 "handlers": { # 將日志打印到終端 "console": { "level": "DEBUG", # 日志級(jí)別 "class": "logging.StreamHandler", # 使用什么類去處理日志流 "formatter": "simple" # 指定上面定義過(guò)的一種日志輸出格式 }, # 默認(rèn)日志處理器 "default": { "level": "DEBUG", "class": "logging.handlers.RotatingFileHandler", # 保存到文件,自動(dòng)切 "filename": os.path.join(BASE_LOG_DIR, "xx.log"), # 日志文件路徑 "maxBytes": 1024 * 1024 * 100, # 日志大小 100M "backupCount": 5, # 日志文件備份的數(shù)量 "formatter": "standard", # 日志輸出格式 "encoding": "utf-8", }, # 日志處理級(jí)別warn "warn": { "level": "WARN", "class": "logging.handlers.RotatingFileHandler", # 保存到文件,自動(dòng)切 "filename": os.path.join(BASE_LOG_DIR, "warn.log"), # 日志文件路徑 "maxBytes": 1024 * 1024 * 100, # 日志大小 100M "backupCount": 5, # 日志文件備份的數(shù)量 "formatter": "standard", # 日志格式 "encoding": "utf-8", }, # 日志級(jí)別error "error": { "level": "ERROR", "class": "logging.handlers.RotatingFileHandler", # 保存到文件,自動(dòng)切 "filename": os.path.join(BASE_LOG_DIR, "error.log"), # 日志文件路徑 "maxBytes": 1024 * 1024 * 100, # 日志大小 100M "backupCount": 5, "formatter": "error", # 日志格式 "encoding": "utf-8", }, }, "loggers": { # 默認(rèn)的logger應(yīng)用如下配置 "": { "handlers": ["default", "warn", "error"], "level": "DEBUG", "propagate": True, # 如果有父級(jí)的logger示例,表示不要向上傳遞日志流 }, "collect": { "handlers": ["console", "default", "warn", "error"], "level": "INFO", } }, }
在settings.py中導(dǎo)入logger.py中的配置即可:
from logger.py import LOGGING
以上就是log日志配置的介紹,歡迎交流!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/42496.html
摘要:默認(rèn)的,及使用它的號(hào)數(shù)據(jù)庫(kù)此處使用號(hào)數(shù)據(jù)庫(kù),在客戶端查看記得切換數(shù)據(jù)庫(kù)存儲(chǔ)在本機(jī)內(nèi)存中,比數(shù)據(jù)庫(kù)的方式讀寫快很多默認(rèn)的配置項(xiàng),采用號(hào)庫(kù)。狀態(tài)保持的配置項(xiàng),采用號(hào)庫(kù)。使用名為的配置項(xiàng)存儲(chǔ)數(shù)據(jù)。配置完成后運(yùn)行程序,測(cè)試結(jié)果。 1.配置開(kāi)發(fā)環(huán)境當(dāng)進(jìn)入虛擬環(huán)境,通過(guò)django_admin創(chuàng)建一個(gè)項(xiàng)目后,會(huì)在項(xiàng)目同名目錄生成一個(gè)setting.py文件。而實(shí)際項(xiàng)目過(guò)程中會(huì)有不同的環(huán)境,如開(kāi)發(fā)環(huán)境、生...
摘要:默認(rèn)的,及使用它的號(hào)數(shù)據(jù)庫(kù)此處使用號(hào)數(shù)據(jù)庫(kù),在客戶端查看記得切換數(shù)據(jù)庫(kù)存儲(chǔ)在本機(jī)內(nèi)存中,比數(shù)據(jù)庫(kù)的方式讀寫快很多默認(rèn)的配置項(xiàng),采用號(hào)庫(kù)。狀態(tài)保持的配置項(xiàng),采用號(hào)庫(kù)。使用名為的配置項(xiàng)存儲(chǔ)數(shù)據(jù)。配置完成后運(yùn)行程序,測(cè)試結(jié)果。 1.配置開(kāi)發(fā)環(huán)境當(dāng)進(jìn)入虛擬環(huán)境,通過(guò)django_admin創(chuàng)建一個(gè)項(xiàng)目后,會(huì)在項(xiàng)目同名目錄生成一個(gè)setting.py文件。而實(shí)際項(xiàng)目過(guò)程中會(huì)有不同的環(huán)境,如開(kāi)發(fā)環(huán)境、生...
摘要:每一條日志記錄也包含級(jí)別,代表對(duì)應(yīng)消息的嚴(yán)重程度。即格式化器,主要功能是確定最終輸出的形式和內(nèi)容。最好是日志能夠按自然天進(jìn)行記錄和分割。 上一章學(xué)習(xí)了自動(dòng)化測(cè)試,很好,現(xiàn)在我們可以絞盡腦汁寫出一份全面的測(cè)試,來(lái)保證代碼永遠(yuǎn)健康了。 話雖如此,但是作為一個(gè)獨(dú)立開(kāi)發(fā)者很難寫出真正全面的測(cè)試代碼。這是因?yàn)橛脩粼谑褂媚愕木W(wǎng)站時(shí)可不會(huì)循規(guī)蹈矩,而是會(huì)以各種怪異的姿勢(shì)瀏覽網(wǎng)頁(yè)、上傳數(shù)據(jù)。但這也不是...
摘要:一監(jiān)控所有的請(qǐng)求如何實(shí)現(xiàn)系統(tǒng)監(jiān)控,自動(dòng)發(fā)送錯(cuò)誤日志的郵件呢只需配置配置文件即可。設(shè)置發(fā)送郵件配置信息郵件會(huì)發(fā)送到設(shè)定的郵件列表中。 showImg(https://segmentfault.com/img/remote/1460000015327475); 一、監(jiān)控所有的request請(qǐng)求 如何實(shí)現(xiàn)系統(tǒng)監(jiān)控,自動(dòng)發(fā)送錯(cuò)誤日志的郵件呢? 只需配置配置settings文件即可。 1.設(shè)置發(fā)...
閱讀 1322·2021-11-15 11:37
閱讀 2580·2021-09-22 10:56
閱讀 3401·2021-09-06 15:11
閱讀 814·2021-08-31 09:45
閱讀 2914·2021-07-28 11:16
閱讀 1816·2019-08-30 15:44
閱讀 487·2019-08-30 13:22
閱讀 3354·2019-08-30 13:18