Django中加入日誌功能

2021-08-21 15:14:07 字數 4437 閱讀 9547

1 django中加入日誌功能

django 中使用python的 logging 模組記錄log,在 django 中使用 django 提供的配製方法。就是在 settings 中通過變數 logging,logging 是乙個字典,典型的配置如下:

logging模組為應用程式提供了靈活的手段記錄事件、錯誤、警告和除錯資訊。對這些資訊可以進行收集、篩選、寫入檔案、傳送給系統日誌等操作,甚至還可以通過網路傳送給遠端計算機。

(1)日誌記錄級別

logging模組的重點在於生成和處理日誌訊息。每條訊息由一些文字和指示其嚴重性的相關級別組成。級別包含符號名稱和數字值。
級別 值 描述

critical 50 關鍵錯誤/訊息

error 40 錯誤

warning 30 警告訊息

info 20 通知訊息

debug 10 除錯

notset 0 無級別

(2)記錄器

記錄器負責管理日誌訊息的預設行為,包括日誌記錄級別、輸出目標位置、訊息格式以及其它基本細節。
關鍵字引數 描述

filename 將日誌訊息附加到指定檔名的檔案

filemode 指定用於開啟檔案模式

format 用於生成日誌訊息的格式字串

datefmt 用於輸出日期和時間的格式字串

level 設定記錄器的級別

stream 提供開啟的檔案,用於把日誌訊息傳送到檔案。

(3)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 記錄的訊息

(4)內建處理器

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中使用日誌

在django的配置檔案settings.py 中加入如下logging配置

#########################

## django logging begin

#########################

#logging_dir 日誌檔案存放目錄

logging_dir = "/home/xxt/logs"

if not os.path.exists(logging_dir):

os.mkdir(logging_dir)

import logging

logging = ,

'******': ,

},'filters': ,

},'handlers': ,

'file_handler': , # 用於檔案輸出

'mail_admins': ,

},'loggers': ,

'django.request': ,

}}logger = logging.getlogger("mdjango")

#########################

## django logging end

#########################

最新日誌內容存入: django.log

前一天:django.log.2018-05-29

前前一天:django.log.2018-05-28

django.log.2018-05-22

在具體的業務邏輯**中加入日誌記錄

from project.settings import  logger

logger.info("indexhandler request handler begin")

logger.debug('query total:' + str(total))

觀察日誌列印情況。

一般python使用日誌功能(非django框架)

import logging

def logging_init():

format_str = "[%(asctime)s][%(levelname)s]> %(message)s"

formatter = logging.formatter(format_str)

file_handler = logging.filehandler(log_file_name)

file_handler.setformatter(formatter)

logger.addhandler(file_handler)

logger.setlevel(logging.info)

return logger

單例模式

import logging

class singleton(object):

_instance = none

def __new__(cls, *args, **kwargs):

if not cls._instance:

cls._instance = super(singleton, cls).__new__(cls,

*args, **kwargs)

return cls._instance

log_file = "test.log"

class singletonlogger(singleton):

def __init__(self):

super(singletonlogger, self).__init__()

format_str = "[%(asctime)s][%(levelname)s]> %(message)s"

formatter = logging.formatter(format_str)

file_handler = logging.filehandler(log_file)

file_handler.setformatter(formatter)

self.logger.addhandler(file_handler)

self.logger.setlevel(logging.info)

def debug(self, data):

self.logger.debug(data)

def info(self, data):

self.logger.info(data)

def warning(self, data):

self.logger.warning(data)

def error(self, data):

self.logger.error(data)

def test_log():

logger = singletonlogger()

#output the log msg

logger.debug("this is the debug message")

logger.info("this is the info message")

logger.warning("this is the warning message")

logger.error("this is the error message")

專案中加入Error Log日誌

全域性變數 extern file fp error general error file extern char error filename 256 error file name int write error char string,int open error file char file...

在 程 序 中 加 入 英 文 朗 讀 功 能

2001年02月21日 17 05 00 金 山 詞 霸2000 的 英 文 全 文 朗 讀 功 能 相 信 一 定 給 嘗 試 過 的 用 戶 留 下 了 很 深 刻 的 印 象,而 作 為 一 個 程 序 設 計 者,你 一 定 也 想 在 自 己 的 程 序 中 加 入 類 似 的 功 能 吧...

思考 怎麼在C 中加入新功能

本文說的不是自定義類,函式之類的,指的是修改,增加c 的語法。重新開發一門新的語言,工作量太大,很難做到科學實用,而是也難以跟上c 的更新進度,所以選擇擴充c 的方法,以滿足專業領域的應用。情景一 定義乙個交換運算子 實現函式 swap a,b 的功能。上 int a 3 int b 5 a b 之...