默認情況下Python的logging
模塊將日志打印到了標準輸出中,且只顯示了大于等于WARNING級別的日志,這說明默認的日志級別設置為WARNING(日志級別等級CRITICAL > ERROR > WARNING > INFO > DEBUG),默認的日志格式為日志級別:Logger名稱:用戶輸出消息。
靈活配置日志級別,日志格式,輸出位置
1
2
3
4
5
6
7
8
9
10
11
|
import logging file_handler = logging.FileHandler(filename = 'x1.log' , mode = 'a' , encoding = 'utf-8' ,) logging.basicConfig( format = '%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s' , datefmt = '%Y-%m-%d %H:%M:%S %p' , handlers = [file_handler,], level = logging.ERROR ) logging.error( '你好' ) |
日志切割
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import time import logging from logging import handlers sh = logging.StreamHandler() rh = handlers.RotatingFileHandler( 'myapp.log' , maxBytes = 1024 ,backupCount = 5 ) fh = handlers.TimedRotatingFileHandler(filename = 'x2.log' , when = 's' , interval = 5 , encoding = 'utf-8' ) logging.basicConfig( format = '%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s' , datefmt = '%Y-%m-%d %H:%M:%S %p' , handlers = [fh,sh,rh], level = logging.ERROR ) for i in range ( 1 , 100000 ): time.sleep( 1 ) logging.error( 'KeyboardInterrupt error %s' % str (i)) |
配置參數
logging.basicConfig()函數中可通過具體參數來更改logging模塊默認行為,可用參數有:
filename:用指定的文件名創建FiledHandler,這樣日志會被存儲在指定的文件中。
filemode:文件打開方式,在指定了filename時使用這個參數,默認值為“a”還可指定為“w”。
format:指定handler使用的日志顯示格式。
datefmt:指定日期時間格式。
level:設置rootlogger(后邊會講解具體概念)的日志級別
stream:用指定的stream創建StreamHandler。可以指定輸出到sys.stderr,sys.stdout或者文件(f=open(‘test.log','w')),默認為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用戶輸出的消息
屬性 | 格式 | 描述 |
---|---|---|
asctime | %(asctime)s | 日志產生的時間,默認格式為2003-07-08 16:49:45,896 |
created | %(created)f | time.time()生成的日志創建時間戳 |
filename | %(filename)s | 生成日志的程序名 |
funcName | %(funcName)s | 調用日志的函數名 |
levelname | %(levelname)s | 日志級別 ('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL') |
levelno | %(levelno)s | 日志級別對應的數值 |
lineno | %(lineno)d | 日志所針對的代碼行號(如果可用的話) |
module | %(module)s | 生成日志的模塊名 |
msecs | %(msecs)d | 日志生成時間的毫秒部分 |
message | %(message)s | 具體的日志信息 |
name | %(name)s | 日志調用者 |
pathname | %(pathname)s | 生成日志的文件的完整路徑 |
process | %(process)d | 生成日志的進程ID(如果可用) |
processName | %(processName)s | 進程名(如果可用) |
thread | %(thread)d | 生成日志的線程ID(如果可用) |
threadName | %(threadName)s | 線程名(如果可用) |
logger對象配置
針對不同的數據流設置不同的日志級別。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
import logging logger = logging.getLogger() # 創建一個handler,用于寫入日志文件 fh = logging.FileHandler( 'test.log' ,encoding = 'utf-8' ) fh.setLevel(logging.DEBUG) # 再創建一個handler,用于輸出到控制臺 ch = logging.StreamHandler() ch.setLevel(logging.INFO) formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) fh.setFormatter(formatter) ch.setFormatter(formatter) #logger對象可以添加多個fh和ch對象 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' ) |
logging庫提供了多個組件:Logger、Handler、Filter、Formatter。Logger對象提供應用程序可直接使用的接口,Handler發送日志到適當的目的地,Filter提供了過濾日志信息的方法,Formatter指定日志顯示格式。另外,可以通過:logger.setLevel(logging.Debug)設置級別,當然,也可以通過fh.setLevel(logging.Debug)單對文件流設置某個級別。
以上就是python logging模塊的使用的詳細內容,更多關于python logging模塊的資料請關注服務器之家其它相關文章!
原文鏈接:https://www.cnblogs.com/guoys/p/13615106.html