1. 程式人生 > 其它 >日誌模組和第三方模組

日誌模組和第三方模組

日誌模組

日誌模組的主要組成部分

import logging

# 1.logger物件:產生日誌
logger = logging.getLogger('轉賬記錄')
# 2.filter物件:過濾日誌
# handler自帶有基本的過濾操作
# 3.handler物件:控制日誌的輸出位置(檔案、終端等)
hd1 = logging.FileHandler('a1.log', encoding='utf-8')  # 儲存到檔案
hd2 = logging.FileHandler('a2.log', encoding='utf-8')  # 儲存到檔案
hd3 = logging.StreamHandler()  # 輸出到終端
# 4.format物件:控制日誌的格式
fm1 = logging.Formatter(
    fmt='%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S %p',
)
fm2 = logging.Formatter(
    fmt='%(asctime)s - %(name)s:  %(message)s',
    datefmt='%Y-%m-%d',
)
# 5.給logger物件繫結handler物件
logger.addHandler(hd1)
logger.addHandler(hd2)
logger.addHandler(hd3)
# 6.給handler繫結formmate物件
hd1.setFormatter(fm1)
hd2.setFormatter(fm2)
hd3.setFormatter(fm1)
# 7.設定日誌等級
logger.setLevel(20)
# 8.記錄日誌
logger.info('tips……')

配置字典

import logging
import logging.config
# 定義日誌輸出格式 開始
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
                  '[%(levelname)s][%(message)s]' #name用於getlogger指定的名字
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
# 定義日誌輸出格式 結束

# 自定義檔案路徑
logfile_path = 'a3.log'

# log配置字典
LOGGING_DIC = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'standard': {
            'format': standard_format
        },
        'simple': {
            'format': simple_format
        },
    },
    'filters': {},  # 過濾日誌
    'handlers': {
        #列印到終端的日誌
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',  # 列印到螢幕
            'formatter': 'simple'
        },
        #列印到檔案的日誌,收集info及以上的日誌
        'default': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',  # 儲存到檔案
            'formatter': 'standard',
            'filename': logfile_path,  # 日誌檔案
            'maxBytes': 1024*1024*20,  # 日誌大小 20m
            'backupCount': 6,
            'encoding': 'utf-8',  # 日誌檔案的編碼
        },
    },
    'loggers': {
        #logging.getLogger(__name__)拿到的logger配置
        '註冊記錄': {
            'handlers': ['default'],  # 這裡把上面定義的兩個handler都加上,即log資料既寫入檔案又列印到螢幕
            'level': 'DEBUG',
            'propagate': True,  # 向上(更高level的logger)傳遞
        },  # 當鍵不存在的情況下 (key設為空字串)預設都會使用該k:v配置
        '登陸記錄': {
            'handlers': ['default', 'console'],  # 這裡把上面定義的兩個handler都加上,即log資料既寫入檔案又列印到螢幕
            'level': 'WARNING',
            'propagate': True,  # 向上(更高level的logger)傳遞
        },  # 當鍵不存在的情況下 (key設為空字串)預設都會使用該k:v配置
    },
}

# 使用日誌字典配置
logging.config.dictConfig(LOGGING_DIC)  # 自動載入字典中的配置
logger1 = logging.getLogger('註冊記錄')
logger2 = logging.getLogger('登陸記錄')
logger1.debug('註冊成功')
logger2.warning('登陸成功')