Django的日志操作,記錄一下自己的使用


日志使用的流程:

1.先要在settings.py 中加入日志的配置

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,  # 是否禁用已經存在的日至實例(diango自帶的報錯),一般不禁用
    'formatters': {  # 定義輸出日志的格式
        'standard': {  # 格式名字可以隨意定義
            'format': '[%(levelname)s][%(asctime)s][%(filename)s][%(funcName)s][%(lineno)d] > %(message)s'  # 定義信息格式,自己隨便定義,都有什么內容查看下邊內容
        },
        'simple': {
            'format': '[%(levelname)s]> %(message)s'
        },
    },
    'filters': {
        'require_debug_true': {  # 只有在settings中的debug=True的時候才會生效
            '()': 'django.utils.log.RequireDebugTrue',  # 指定過濾器但是不知道是干什么的沒研究明白
        },
    },
    'handlers': {  # 都叫這個為控制器,控制是什么樣的記錄方式等的一些參數
        'default': {
            'level': 'DEBUG',  # 日志級別
            'class': 'logging.handlers.RotatingFileHandler',  # 定義日志的切分格式,以及輸出方式
            'filename': os.path.join(LOGS_DIR, 'django.log'),  # 日志文件,請確保修改'filename'路徑為運行Django應用的用戶有權限寫入的一個位置
            'maxBytes': 1024 * 1024 * 5,  # 5 MB 文件大小
            'backupCount': 60,  # 備份份數
            'formatter': 'standard',  # 使用哪種日志格式
        },
        'console': {
            'level': 'DEBUG',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler', # 輸出到控制台,這個類指定的不同輸出方式不一樣,下邊是這個地方指定的類所需要的參數
            'formatter': 'simple'
        },
        'file': {
           'level': 'DEBUG',
           'class': 'logging.handlers.TimedRotatingFileHandler',
           # TimedRotatingFileHandler的參數, 其他博客上說這個類可以按照日期分割日志,但是我沒試出來
           # 參照https://docs.python.org/3/library/logging.handlers.html#timedrotatingfilehandler
           # 目前設定每天一個日志文件
           'filename': os.path.join(LOGS_DIR, 'django.log'),
           'when': 'midnight',
           'interval': 1,
           'backupCount': 60,
           'formatter': 'standard'
          },
        # 'file_handler': {
        #      'level': 'INFO',
        #      'class': 'logging.handlers.TimedRotatingFileHandler',
        #      'filename': os.path.join(LOGS_DIR, 'django.log'),
        #      'formatter': 'standard'
        # },  # 用於文件輸出
    },
    'loggers': {  # 都叫這個容器,配置上容器內使用什么控制器記錄日志,后邊實例化時getLogger內寫的就是這個里面的某個容器名
        'django': {
            'handlers': ['default', 'console'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'django.everyday': {
            'handlers': ['file', 'console'],
            'level': 'DEBUG',
            'propagate': True,
        },
        # 'django.request': {
        #     'handlers': ['mail_admins'],
        #     'level': 'ERROR',
        #     'propagate': False,
        # },
    }
}

 上邊提到的信息輸出格式都有以下內容:

格式 描述
%(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 記錄的消息

2.去視圖中實例化一個日志記錄的對象

logger = logging.getLogger("django.everyday")

實例化時傳入的參數應該是配置文件內loggers容器內聲明好的容器

 

3.實例化對象后在需要輸出日志的地方寫上輸出語句

logger.info(msg)
logger.error(e)

logger有不同的信息,調用不同方法寫入不同的類型的信息

一般info是正常信息,warning是警告信息,error是錯誤信息,常用的就這些

 

注:

如果想要django自動記錄一些內容需要在loggers中配置上名字叫django的容器,這樣django才會自動將規定等級以上的信息寫入日志


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM