記錄Python腳本的運行日志


一、logging模塊

Python中有一個模塊logging,可以直接記錄日志

#   日志級別
# CRITICAL 50
# ERROR 40
# WARNING 30
# INFO 20
# DEBUG 10
logging.basicConfig()函數中的具體參數:
filename:   指定的文件名創建FiledHandler,這樣日志會被存儲在指定的文件中;
filemode:   文件打開方式,在指定了filename時使用這個參數,默認值為“w”還可指定為“a”;
format:      指定handler使用的日志顯示格式;
datefmt:    指定日期時間格式。,格式參考strftime時間格式化(下文)
level:        設置rootlogger的日志級別
stream:     用指定的stream創建StreamHandler。可以指定輸出到sys.stderr,sys.stdout或者文件,默認為sys.stderr。
                  若同時列出了filename和stream兩個參數,則stream參數會被忽略。
 
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

用戶輸出的消息

二、logging模塊測試

1、打印日志到標准輸出中

import logging
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')

輸出結果

C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe D:/pyworkpeace/tupian.py 'https://www.tianyancha.com/login'
WARNING:root:warning message

Process finished with exit code 0

可以看出默認情況下Python的logging模塊將日志打印到了標准輸出中,且只顯示了大於等於WARNING級別的日志。默認的日志的格式為:

日志級別:Logger名稱:用戶輸出消息

2、將日志文件輸入到文件中

import os
logging.basicConfig(filename=os.path.join(os.getcwd(),'log.txt'),level=logging.DEBUG)
logging.debug('this is a message')

運行這三行代碼后會在安裝Python的目錄中出現一個log.txt文件,文件內容

DEBUG:root:this is a message
DEBUG:root:debug message

3、自定義格式,輸出日志文件

# -*-coding:utf-8-*-

import logging


def console_out(logFilename):
    ''''' Output log to file and console '''
    # Define a Handler and set a format which output to file
    logging.basicConfig(
        level=logging.DEBUG,  # 定義輸出到文件的log級別,大於此級別的都被輸出
        format='%(asctime)s  %(filename)s : %(levelname)s  %(message)s',  # 定義輸出log的格式
        datefmt='%Y-%m-%d %A %H:%M:%S',  # 時間
        filename=logFilename,  # log文件名
        filemode='w')  # 寫入模式“w”或“a”
    # Define a Handler and set a format which output to console
    console = logging.StreamHandler()  # 定義console handler
    console.setLevel(logging.INFO)  # 定義該handler級別
    formatter = logging.Formatter('%(asctime)s  %(filename)s : %(levelname)s  %(message)s')  # 定義該handler格式
    console.setFormatter(formatter)
    # Create an instance
    logging.getLogger().addHandler(console)  # 實例化添加handler

    # Print information              # 輸出日志級別
    logging.debug('logger debug message')
    logging.info('logger info message')
    logging.warning('logger warning message')
    logging.error('logger error message')
    logging.critical('logger critical message')


if __name__ == "__main__":
    console_out('logging.log')

輸出結果:

此時也會自動生成一個日志文件,日志文件和運行文件在同一個文件夾中,文件名logging.log

2017-10-23 Monday 11:37:59 hgghf : DEBUG logger debug message
2017-10-23 Monday 11:37:59 hgghf : INFO logger info message
2017-10-23 Monday 11:37:59 hgghf : WARNING logger warning message
2017-10-23 Monday 11:37:59 hgghf : ERROR logger error message
2017-10-23 Monday 11:37:59 hgghf : CRITICAL logger critical message

修改輸出路徑:

filename='/tmp/test1.log',  # log文件名
當將腳本中這行代碼換一下,那么我們輸出日志的路徑地址就換成了D:\tmp
下面的方式同樣可以達到上述結果

 4、自定義輸出位置

import logging  
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='/tmp/test.log',  
                    filemode='w')  
  
logging.debug('debug message')  
logging.info('info message')  
logging.warning('warning message')  
logging.error('error message')  
logging.critical('critical message') 

由於運行腳本放在D:\pyworkpeace\下,輸出文件在D盤tmp文件夾下test.log,內容如下:

Mon, 23 Oct 2017 15:00:05 tupian.py[line:11] DEBUG debug message
Mon, 23 Oct 2017 15:00:05 tupian.py[line:12] INFO info message
Mon, 23 Oct 2017 15:00:05 tupian.py[line:13] WARNING warning message
Mon, 23 Oct 2017 15:00:05 tupian.py[line:14] ERROR error message
Mon, 23 Oct 2017 15:00:05 tupian.py[line:15] CRITICAL critical message

三、Logger,Handler,Formatter,Filter的概念

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM