1. 程式人生 > >Django開發--日誌處理2.0

Django開發--日誌處理2.0

日誌:

使用舉例:

在要用log的view.py裡面,如果想用django這個日誌,則

            log=logging.getLogger('django')

            log.error(“日誌內容”)

如果,想要在日誌內容裡面傳遞變數,怎麼辦?

            log.error(" %s : execute %s failed",變數1,變數2),比較像c的printf,還是很方便的。

settings.py內配置資訊:

# log settings
# 日誌的文字日誌級別,由低到高分別為:DEBUG -> INFO -> WARNING -> ERROR -> CRITICAL
# 日誌的數字日誌級別,由低到高分別為: 10 -> 20 -> 30 -> 40 -> 50
# formatters: 指定輸出的格式,被handler使用
# handlers:實際上來處理日誌記錄的地方。指定輸出到控制檯還是檔案中還是其他..,以及輸出的方式。被logger引用
# loggers: 指定django中的每個模組使用哪個handlers。以及日誌輸出的級別
# filters: 是在資訊從logger傳遞到handler的過程中實施一些過濾行為,沒有預設情況: 任何達到log level的日誌資訊都會被處理
# 注意:日誌的輸出級別是由loggers中的每個模組中level選項定義。如果沒有配置,那麼預設為warning級別
LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,     # 預設True,預設的配置就會被禁用.但官方說這樣可能有意外結果
    'formatters': {
        'standard': {
            # asctime: 時間(年月日時分秒毫秒)
            # threadName: 執行緒名, thread: 執行緒ID
            # processName: 程序名稱, process: 程序ID
            # name: 日誌器名稱(用loggers的哪個)
            # lineno: 數字日誌級別, levelname: 文字日誌級別
            # message: 日誌文字內容
            'format': '%(asctime)s [%(processName)s:%(process)d] [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(levelname)s]- %(message)s'
        },
    },
    'filters': {
        # 'require_debug_true': {
        #     '()': 'django.utils.log.RequireDebugTrue',
        # },
    },
    'handlers': {
        # 'mail_admins': {
        #     'level': 'ERROR',
        #     'class': 'django.utils.log.AdminEmailHandler',
        #     'include_html': True,
        # },
        'file': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(BASE_DIR + '/logs/', 'all.log'),  # 或者直接寫路徑:'c:\logs\all.log',
            'maxBytes': 1024 * 1024 * 5,  # 5 MB
            'backupCount': 5,
            'formatter': 'standard',
        },
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'standard'
        },
        'request_handler': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(BASE_DIR + '/logs/', 'request.log'),  # 或者直接寫路徑:'filename':'c:\logs\request.log''
            'maxBytes': 1024 * 1024 * 5,  # 5 MB
            'backupCount': 5,
            'formatter': 'standard',
        },
        # 'scprits_handler': {
        #     'level': 'DEBUG',
        #     'class': 'logging.handlers.RotatingFileHandler',
        #     'filename': os.path.join(BASE_DIR + '/logs/', 'script.log'),  # 或者直接寫路徑:'filename':'c:\logs\script.log'
        #     'maxBytes': 1024 * 1024 * 5,  # 5 MB
        #     'backupCount': 5,
        #     'formatter': 'standard',
        # },
    },
    'loggers': {
        # loggers,日誌器,是有層級關係的
        # propagate屬性值為1或True,則表示日誌訊息將會被輸出到處理器指定的位置,
        # 同時還會被傳遞給parent日誌器的handlers進行處理直到當前日誌器的propagate屬性為0停止,
        # 如果propagate值為0或False,則表示不向parent日誌器的handlers傳遞該訊息,到此結束。
        'django': {    # 檔案形式, 控制檯形式
            'handlers': ['file', 'console'],
            'level': 'INFO',
            'propagate': False
        },
        'django.request': {
            'handlers': ['request_handler'],
            'level': 'DEBUG',
            'propagate': False
        },
        # 'scripts': {  # 指令碼專用日誌
        #     'handlers': ['scprits_handler'],
        #     'level': 'INFO',
        #     'propagate': False
        # },
    }
}