1. 程式人生 > >Python logging日誌模組

Python logging日誌模組

1.日誌的級別

日誌一共分成5個等級, 從低到高分別是:

    1. DEBUG 
    2. INFO 
    3. WARNING 
    4. ERROR 
    5. CRITICAL 

說明:

  • DEBUG: 詳細的資訊,通常只出現在診斷問題上
  • INFO: 確認一切按預期執行
  • WARNING: 一個跡象表明,一些意想不到的事情發生了,或表明一些問題在不久的將來(例如。 磁碟空間低”)。 這個軟體還能按預期工作。
  • ERROR: 更嚴重的問題,軟體沒能執行一些功能
  • CRITICAL: 一個嚴重的錯誤,這表明程式本身可能無法繼續執行

這5個等級, 也分別對應5種打日誌的方法: debug 、 info 、 warning 、 error 、 critical。 預設的是 WARNING, 當在WARNING或之上時才被跟蹤。

2.日誌的輸出

2.1將日誌輸出到控制檯
  import logging
   logging.basicConfig(level=logging.WARNING,format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
   # 開始使用log功能
   logging.info('這是 loggging info message')
   logging.debug('這是 loggging debug message')
   logging.warning('這是 loggging a warning message'
) logging.error('這是 an loggging error message') logging.critical('這是 loggging critical message')

輸出結果:

    2018-11-03 08:42:59,353 - 004-日誌.py[line:6] - WARNING: 這是 loggging a warning message
    2018-11-03 08:42:59,353 - 004-日誌.py[line:7] - ERROR: 這是 an loggging error message
    2018-11-03 08:42:59,353 -
004-日誌.py[line:8] - CRITICAL: 這是 loggging critical message
2.2將日誌輸出到檔案
    import logging
    logging.basicConfig(level=logging.WARNING,
                        filename='./log.txt', # 檔案路徑及檔名
                        filemode='w',
                        format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
    
    # use logging
    logging.info('這是 loggging info message')
    logging.debug('這是 loggging debug message')
    logging.warning('這是 loggging a warning message')
    logging.error('這是 an loggging error message')
    logging.critical('這是 loggging critical message')

輸出結果:

    在檔名下生成log.txt,內容與上面相同
2.3將日誌輸出到控制檯和檔案(重點

需要用到Logger 的物件 ,具體程式碼如下:

    import logging
    # 第一步, 建立一個logger
    logger = logging.getLogger()
    logger.setLevel(logging.INFO) # Log等級總開關
    
    # 第二步, 建立一個handler, 用於寫入日誌檔案
    logfile = './log.txt'
    fh = logging.FileHandler(logfile, mode='a') # open的開啟模式這裡可以進行參考
    fh.setLevel(logging.DEBUG) # 輸出到file的log等級的開關
    
    # 第三步, 再建立一個handler, 用於輸出到控制檯
    ch = logging.StreamHandler()
    ch.setLevel(logging.WARNING) # 輸出到console的log等級的開關
    
    # 第四步, 定義handler的輸出格式
    formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
    fh.setFormatter(formatter)  # 檔案
    ch.setFormatter(formatter)  # 控制檯
    
    # 第五步, 將logger新增到handler裡面
    logger.addHandler(fh)
    logger.addHandler(ch)
    
    # 日誌
    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')

輸出結果

    """"控制檯""""
    2018-11-03 14:25:53,887 - 004-日誌.py[line:53] - WARNING: 這是 logger warning message
    2018-11-03 14:25:53,887 - 004-日誌.py[line:54] - ERROR: 這是 logger error message
    2018-11-03 14:25:53,887 - 004-日誌.py[line:55] - CRITICAL: 這是 logger critical message
                
    """ 檔案 """
    2018-11-03 14:25:53,887 - 004-日誌.py[line:52] - INFO: 這是 logger info message
    2018-11-03 14:25:53,887 - 004-日誌.py[line:53] - WARNING: 這是 logger warning message
    2018-11-03 14:25:53,887 - 004-日誌.py[line:54] - ERROR: 這是 logger error message
    2018-11-03 14:25:53,887 - 004-日誌.py[line:55] - CRITICAL: 這是 logger critical message

3. 日誌格式說明

logging.basicConfig函式中, 可以指定日誌的輸出格式format, 這個引數可以輸出很多有用的信 息, 如下:

  • %(levelno)s: 列印日誌級別的數值
  • %(levelname)s: 列印日誌級別名稱
  • %(pathname)s: 列印當前執行程式的路徑, 其實就是sys.argv[0]
  • %(filename)s: 列印當前執行程式名
  • %(funcName)s: 列印日誌的當前函式
  • %(lineno)d: 列印日誌的當前行號
  • %(asctime)s: 列印日誌的時間
  • %(thread)d: 列印執行緒ID
  • %(threadName)s: 列印執行緒名稱
  • %(process)d: 列印程序ID
  • %(message)s: 列印日誌資訊

在工作中給的常用格式如下: (重點)

    format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s' 

這個格式可以輸出日誌的列印時間, 是哪個模組輸出的, 輸出的日誌級別是什麼, 以及輸入的日誌 內容。

以上內容僅是代表個人總結 若有錯誤之處,還請批評指正,歡迎大家一起學習!