logging模塊

# logging模塊
    # 日誌模塊


# 日誌
    # 日誌用來記錄用戶行爲的,有沒有錯都要記錄下來
    # 或者記錄代碼的執行過程的時候,咱們須要記錄下來
    # 排錯的時候須要打印不少細節來幫助咱們排錯時,咱們須要記錄下來
    # 嚴重的錯誤應該記錄下來



# 在logging模塊中有5個級別, 默認只輸出info以上的級別不包括info級別
# import logging
# logging.debug('debug message')  # 低級別   排錯信息
# logging.info('info message')    # 正常的信息
# logging.warning('warning message')  # 警告嘻嘻
# logging.error('error message')  # 錯誤信息
# logging.critical('critical message')    # 高級別   # 嚴重錯誤信息


# 能夠經過配置的方式使logging日誌輸出的信息更好看
    # 兩種配置日誌的方式
        # basicconfig 用法簡單,能作的事情相對少
            # 缺點
                # 記錄到日誌文件中時,解決不了中文的亂碼問題
                # 不能同時往文件和屏幕上輸出
        # 配置log對象  用戶比較複雜,能作的事情相對多

# 配置日誌logging, level=loggin.DEBUG,配置debug級別以上的信息都輸出。 NOTSET = 0爲最低
    # format,格式化,asctime 是時間,對應datefmt。 filename是文件名字,對應filename。lineo是多少行。levelname是等級。message是信息內容
#
# import logging
# print('%(key)s' % {'key' : 'value'})    # value
# logging.basicConfig(level = logging.DEBUG,
#                     format = '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
#                     datefmt = '%a, %d %b %Y %H:%M:%S',
#                     filename = 'test.log',
#                     filemode = 'a')
#
# logging.debug('debug message')  # 低級別   排錯信息
# logging.info('info message')    # 正常的信息
# logging.warning('warning message')  # 警告嘻嘻
# logging.error('error message')  # 錯誤信息
# logging.critical('critical message')    # 高級別,基於操做系統級別的信息了   # 嚴重錯誤信息
#
# # 例,輸入值錯誤,異常處理後,將錯誤輸出到日誌中
# try:
#     int(input('num >>>'))
# except ValueError:
#     logging.error('input ValueError')

# basicConfig缺點
    # 記錄到日誌文件中時,解決不了中文的亂碼問題
    # 不能同時往文件和屏幕上輸出
    # 因此通常不用logging中的basicConfig來記錄日誌


# 此種日誌爲靈活,充分解耦,比較經常使用
import logging
logger = logging.getLogger()    # 建立一個logger對象

# 建立一個handler,用於寫入日誌文件
fh = logging.FileHandler('test2.log', encoding='utf-8') # 建立一個文件描述符

# 再建立一個handler,用於輸出到控制檯
ch = logging.StreamHandler()    # 在建立一個控制檯的文件秒速福
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s[line:%(lineno)d] -%(message)s')   # 設置輸出格式化的格式

#formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
 #                   datefmt = '%a, %d %b %Y %H:%M:%S')
fh.setLevel(logging.DEBUG)  # 設置輸出等級

# 文件操做符和格式關聯
fh.setFormatter(formatter)  # 設置日誌文件(文件描述符)爲該格式輸出
ch.setFormatter(formatter)  # 設置控制檯(文件描述符)爲該格式輸出

# logger對象和文件操做符關聯綁定
logger.addHandler(fh)   # logger對象能夠添加多個fh和ch對象   將日誌操做符綁定到logger中
logger.addHandler(ch)   #   將控制檯操做符綁定到logger中

logger.debug('logger debug message')
logger.info('logger info message')
logger.warning('logger warning message')
logger.error('logger error message')
logger.critical('logger critical message')


# 例,輸入值錯誤,異常處理後,將錯誤輸出到日誌中
try:
    int(input('num >>>'))
except ValueError:
    logger.error('input ValueError')






# zabbix 比較好的監控系統

 

logging 類spa

class Logger(object):
    level_relations = {
        'debug':logging.DEBUG,
        'info':logging.INFO,
        'warning':logging.WARNING,
        'error':logging.ERROR,
        'crit':logging.CRITICAL
    }#日誌級別關係映射

    def __init__(self, filename, level='info', when='D', backCount=3, fmt='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'):
        self.logger = logging.getLogger(filename)
        format_str = logging.Formatter(fmt)#設置日誌格式
        self.logger.setLevel(self.level_relations.get(level))#設置日誌級別
        sh = logging.StreamHandler()#往屏幕上輸出
        sh.setFormatter(format_str) #設置屏幕上顯示的格式
        th = handlers.TimedRotatingFileHandler(filename=filename,when=when,backupCount=backCount,encoding='utf-8')#往文件裏寫入#指定間隔時間自動生成文件的處理器
        #實例化TimedRotatingFileHandler
        #interval是時間間隔,backupCount是備份文件的個數,若是超過這個個數,就會自動刪除,when是間隔的時間單位,單位有如下幾種:
        # S 秒
        # M 分
        # H 小時、
        # D 天、
        # W 每星期(interval==0時表明星期一)
        # midnight 天天凌晨
        th.setFormatter(format_str)#設置文件裏寫入的格式
        self.logger.addHandler(sh) #把對象加到logger裏
        self.logger.addHandler(th)


logfilename = 'NBT100_' + time.strftime('%Y-%m-%d') + '.log'
log = Logger(logfilename, level='debug')
log.logger.info('[%s]收到灃泰FTM13不帶閥命令1:' % time.strftime('%Y-%m-%d %H:%M:%S'))
相關文章
相關標籤/搜索