1. 程式人生 > >輸出日誌到檔案

輸出日誌到檔案

python自動化測試指令碼執行後,想要將日誌儲存到某個特定檔案,使用python的logging模組實現

參考程式碼:

複製程式碼

import logging

def initLogging(logFilename,e):

  logging.basicConfig(
                    level = logging.INFO,
                    format ='%(asctime)s-%(levelname)s-%(message)s',
                    datefmt = '%y-%m-%d %H:%M',
                    filename = logFilename,
                    filemode = 'a')
  
  filehandler = logging.FileHandler(logFilename,encoding='utf-8')
  logging.getLogger().addHandler(filehandler )
  log = logging.exception(e)
  return log

複製程式碼

1.日誌級別使用場景:
在終端輸出程式或指令碼的使用方法:print
報告一個事件的發生(例如狀態的修改):logging.info()或logging.debug()
發生了一個特定的警告性的事件:logging.warn()
發生了一個特定的錯誤性的事件:raise
發生了一個特定的錯誤性的事件,但是又不想因為此錯誤導致程式退出(例如程式是一個守護程序):logging.error(),logging.exception(),logging.critical()

2.logging.basicConfig()函式中可通過具體引數來更改logging模組預設行為,可用引數有:
level:設定日誌級別 
format:指定handler使用的日誌顯示格式
datefmt:指定日期時間格式,如果format引數中存在asctime,則需要指定時間格式
filename:用指定的檔名建立FiledHandler,這樣日誌會被儲存在指定的檔案中
filemode:檔案開啟方式,在指定了filename時使用這個引數,預設值為“a”還可指定為“w”

3.format引數中可能用到的格式化串:
%(name)s Logger的名字
%(levelno)s 數字形式的日誌級別
%(levelname)s 文字形式的日誌級別
%(pathname)s 呼叫日誌輸出函式的模組的完整路徑名,可能沒有
%(filename)s 呼叫日誌輸出函式的模組的檔名
%(module)s 呼叫日誌輸出函式的模組名
%(funcName)s 呼叫日誌輸出函式的函式名
%(lineno)d 呼叫日誌輸出函式的語句所在的程式碼行
%(created)f 當前時間,用UNIX標準的表示時間的浮 點數表示
%(relativeCreated)d 輸出日誌資訊時的,自Logger建立以 來的毫秒數
%(asctime)s 字串形式的當前時間。預設格式是 “2003-07-08 16:49:45,896”。逗號後面的是毫秒
%(thread)d 執行緒ID。可能沒有
%(threadName)s 執行緒名。可能沒有
%(process)d 程序ID。可能沒有
%(message)s使用者輸出的訊息

4.logging模組的瞭解,必須知道:Logger,Handler,Formatter,Filter
(1)logger 提供了應用程式可以直接使用的介面
每個程式在輸出資訊之前都要獲得一個Logger
Logger.addHandler(hdlr)、Logger.removeHandler(hdlr):增加或刪除指定的handler

(2)handler 將(logger建立的)日誌記錄傳送到合適的目的輸出
logging.FileHandler用於向一個檔案輸出日誌資訊,不過FileHandler會幫你開啟這個檔案。它的建構函式是:
FileHandler(filename[,mode])filename是檔名,必須指定一個檔名;mode是檔案的開啟方式

(3)filter 提供了細度裝置來決定輸出哪條日誌記錄

(4)formatter 決定日誌記錄的最終輸出格式

5.輸出日誌結果:

複製程式碼

18-06-12 17:34-ERROR-string indices must be integers
Traceback (most recent call last):
  File "C:/Users/xx/Documents/GitHub/python3/main/run_test.py", line 70, in go_on_run
    op_header.write_cookie()
  File "C:\Users\xx\Documents\GitHub\python3\util\operation_header.py", line 30, in write_cookie
    cookie = requests.utils.dict_from_cookiejar(self.get_cookie())
  File "C:\Users\xx\Documents\GitHub\python3\util\operation_header.py", line 25, in get_cookie
    url = self.get_response_url()+"&callback=jQuery21008240514814031887_1508666806688&_=1508666806689"
  File "C:\Users\xx\Documents\GitHub\python3\util\operation_header.py", line 18, in get_response_url
    url = self.response['data']['url'][0]
TypeError: string indices must be integers