Python3日誌模塊logging

目錄

 

1. logging模塊

1.1 日誌級別

1.2 logging.basicConfig()函數

1.3 實例

3. logging.getLogger()函數


1. logging模塊

logging模塊是Python內置的標準模塊,主要用於輸出運行日誌,可以設置輸出日誌的等級、日誌保存路徑、日誌文件回滾等;相比print,具備如下優點:

  • 可以通過設置不同的日誌等級,在release版本中只輸出重要信息,而不必顯示大量的調試信息;
  • print將所有信息都輸出到標準輸出中,嚴重影響開發者從標準輸出中查看其它數據;logging則可以由開發者決定將信息輸出到什麼地方,以及怎麼輸出;

1.1 日誌級別

python的logging模塊提供了標準的日誌接口,你可以通過它存儲各種格式的日誌,logging的日誌可以爲 debug(), info(), warning(), error()和critical() 5個級別。

日誌級別(由低到高)

 

DEBUG

 

INFO

 

WARNING

 

ERROR

 

CRITICAL

 

1.2 logging.basicConfig()函數

logging.basicConfig()函數爲日誌系統建立一個默認的流處理器(StreamHandler),設置基礎配置(如日誌級別等)並加到root logger(根Logger)中。

可通過具體參數來更改logging模塊默認行爲,可用參數有

  • filename:用指定的文件名創建FileHandler,這樣日誌會被存儲在指定的文件中
  • filemode:文件打開方式,在指定了filename時使用這個參數,默認爲“a”,還可指定爲“w”
  • format:指定handler使用的日誌顯示格式
  • datefmt:指定日期時間格式
  • level:設置rootlogger的日誌級別
  • stream:用指定的stream創建StreamHandler。可以指定輸出到sys.stderr,sys.stdout或者文件,默認爲sys.stderr。若同時列出了filename和stream兩個參數,則stream參數會被忽略

format參數中可能用到的格式化字符串

format格式

描述

%(name)s

Logger的名字

%(levelno)s

數字形式的日誌級別

%(levelname)s

文本形式的日誌級別

%(pathname)s

調用日誌輸出函數的模塊的完整路徑名,可能沒有

%(filename)s

調用日誌輸出函數的模塊的文件名

%(module)s

調用日誌輸出函數的模塊名

%(funcName)s

調用日誌輸出函數的函數名

%(lineno)d

調用日誌輸出函數的語句所在的代碼行

%(create)f

當前時間,用Unix標準的表示時間的表示(浮點數)

%(relativeCreated)d

輸出日誌信息時的,自Logger創建以來的毫秒數

%(asctime)s

字符串形式的當前時間。

默認格式是 “2003-07-08 16:49:45,896”。逗號後面的是毫秒

%(thread)d

線程ID。可能沒有

%(threadName)s

線程名。可能沒有

%(process)d

進程ID。可能沒有

%(message)s

用戶輸出的消息

1.3 實例

import logging
logging.basicConfig(level = logging.DEBUG,
        format = '%(asctime)s\t%(filename)s\t[line:%(lineno)d]\t%(levelname)s\t%(message)s',
        datefmt = '%a, %d-%b-%Y %H:%M:%S',
        filename = '/var/log/test.log',
        filemode='a+')
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')

運行上述代碼後,輸入cat /var/log/test.log進行查看

 

3. logging.getLogger()函數

logging.getLogger()函數返回一個Logger對象,如果沒有指定名字將返回root logger

import logging
#創建一個logger對象
logger = logging.getLogger()
#創建一個handler,用於寫入日誌文件
fh = logging.FileHandler('/var/log/test.log')
#再創建一個handler,用於輸出到控制檯
ch = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s -%(message)s')
#增加formatter輸出格式到屏幕輸出對象和文件輸出對象
fh.setFormatter(formatter)
ch.setFormatter(formatter)
#將屏幕輸出對象和文件輸出對象添加到Logger
logger.addHandler(fh)
logger.addHandler(ch)
logger.setLevel(logging.DEBUG)
logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')

輸入cat /var/log/test1.py查看日誌文件(以和上述日誌分開)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章