1. 程式人生 > >Python列印log,包括行號,路徑,方法名,檔案

Python列印log,包括行號,路徑,方法名,檔案

logger.py 檔案

 #!/usr/bin/python
 # coding: utf-8
  
 import logging
 import logging.handlers
 from logging import *
 from datetime import *
 
 logger = logging.getLogger()
 logger.setLevel(logging.DEBUG)
 
 rht = logging.handlers.TimedRotatingFileHandler("reindex_out.log", 'D')
 fmt = logging.Formatter("%(asctime)s %(pathname)s %(filename)s %(funcName)s %(lineno)s \
      %(levelname)s - %(message)s", "%Y-%m-%d %H:%M:%S")
 rht.setFormatter(fmt)
 logger.addHandler(rht)
 
 debug = logger.debug
 info = logger.info
 warning = logger.warn
 error = logger.error
 critical = logger.critical

測試指令碼

#!/usr/bin/env python
# coding utf-8
 
from logger import *
import sys
import os
 
info("log from logger info")

debug("this is from test.py")
print 'current dir is ' + os.getcwd()

format: 指定輸出的格式和內容,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:    列印日誌資訊

datefmt: 指定時間格式,同time.strftime()

level: 設定日誌級別,預設為logging.WARNING

級別 對應的值
CRITICAL 50
ERROR 40
WARNING 30
INFO 20
DEBUG 10
NOTSET 0

可以給日誌物件(Logger Instance)設定日誌級別,低於該級別的日誌訊息將會被忽略,也可以給Hanlder設定日誌級別,對於低於該級別的日誌訊息, Handler也會忽略。