久久96国产精品久久久-久久发布国产伦子伦精品-久久精品国产精品青草-久久天天躁夜夜躁狠狠85麻豆

技術員聯盟提供win764位系統下載,win10,win7,xp,裝機純凈版,64位旗艦版,綠色軟件,免費軟件下載基地!

當前位置:主頁 > 教程 > 服務器類 >

python之配置日志的幾種方式

來源:技術員聯盟┆發布時間:2017-10-01 00:39┆點擊:

作為開發者,我們可以通過以下3中方式來配置logging:

1)使用Python代碼顯式的創建loggers, handlers和formatters并分別調用它們的配置函數;

2)創建一個日志配置文件,然后使用fileConfig()函數來讀取該文件的內容;

3)創建一個包含配置信息的dict,然后把它傳遞個dictConfig()函數;

需要說明的是,logging.basicConfig()也屬于第一種方式,它只是對loggers, handlers和formatters的配置函數進行了封裝。另外,第二種配置方式相對于第一種配置方式的優點在于,它將配置信息和代碼進行了分離,這一方面降低了日志的維護成本,同時還使得非開發人員也能夠去很容易地修改日志配置。

一、使用Python代碼實現日志配置

代碼如下:

# 創建一個日志器logger并設置其日志級別為DEBUG logger = logging.getLogger('simple_logger') logger.setLevel(logging.DEBUG) # 創建一個流處理器handler并設置其日志級別為DEBUG handler = logging.StreamHandler(sys.stdout) handler.setLevel(logging.DEBUG) # 創建一個格式器formatter并將其添加到處理器handler formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") handler.setFormatter(formatter) # 為日志器logger添加上面創建的處理器handler logger.addHandler(handler) # 日志輸出 logger.debug('debug message') logger.info('info message') logger.warn('warn message') logger.error('error message') logger.critical('critical message')

運行輸出:

2017-05-15 11:30:50,955 - simple_logger - DEBUG - debug message 2017-05-15 11:30:50,955 - simple_logger - INFO - info message 2017-05-15 11:30:50,955 - simple_logger - WARNING - warn message 2017-05-15 11:30:50,955 - simple_logger - ERROR - error message 2017-05-15 11:30:50,955 - simple_logger - CRITICAL - critical message

二、使用配置文件和fileConfig()函數實現日志配置

現在我們通過配置文件的方式來實現與上面同樣的功能:

# 讀取日志配置文件內容 logging.config.fileConfig('logging.conf') # 創建一個日志器logger logger = logging.getLogger('simpleExample') # 日志輸出 logger.debug('debug message') logger.info('info message') logger.warn('warn message') logger.error('error message') logger.critical('critical message')

配置文件logging.conf內容如下:

[loggers] keys=root,simpleExample [handlers] keys=fileHandler,consoleHandler [formatters] keys=simpleFormatter [logger_root] level=DEBUG handlers=fileHandler [logger_simpleExample] level=DEBUG handlers=consoleHandler qualname=simpleExample propagate=0 [handler_consoleHandler] class=StreamHandler args=(sys.stdout,) level=DEBUG formatter=simpleFormatter [handler_fileHandler] class=FileHandler args=('logging.log', 'a') level=ERROR formatter=simpleFormatter [formatter_simpleFormatter] format=%(asctime)s - %(name)s - %(levelname)s - %(message)s datefmt=

運行輸出:

2017-05-15 11:32:16,539 - simpleExample - DEBUG - debug message 2017-05-15 11:32:16,555 - simpleExample - INFO - info message 2017-05-15 11:32:16,555 - simpleExample - WARNING - warn message 2017-05-15 11:32:16,555 - simpleExample - ERROR - error message 2017-05-15 11:32:16,555 - simpleExample - CRITICAL - critical message

1. 關于fileConfig()函數的說明:

該函數實際上是對configparser模塊的封裝,關于configparser模塊的介紹請參考<。

函數定義:

該函數定義在loging.config模塊下:

復制代碼 代碼如下:


logging.config.fileConfig(fname, defaults=None, disable_existing_loggers=True)

參數:

fname:表示配置文件的文件名或文件對象

defaults:指定傳給ConfigParser的默認值

disable_existing_loggers:這是一個布爾型值,默認值為True(為了向后兼容)表示禁用已經存在的logger,除非它們或者它們的祖先明確的出現在日志配置中;如果值為False則對已存在的loggers保持啟動狀態。

2. 配置文件格式說明:

上面提到過,fileConfig()函數是對ConfigParser/configparser模塊的封裝,也就是說fileConfig()函數是基于ConfigParser/configparser模塊來理解日志配置文件的。換句話說,fileConfig()函數所能理解的配置文件基礎格式是與ConfigParser/configparser模塊一致的,只是在此基礎上對文件中包含的section和option做了一下規定和限制,比如:

1)配置文件中一定要包含loggers、handlers、formatters這些section,它們通過keys這個option來指定該配置文件中已經定義好的loggers、handlers和formatters,多個值之間用逗號分隔;另外loggers這個section中的keys一定要包含root這個值;

2)loggers、handlers、formatters中所指定的日志器、處理器和格式器都需要在下面以單獨的section進行定義。seciton的命名規則為[logger_loggerName]、[formatter_formatterName]、[handler_handlerName]