最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python中l(wèi)ogging包的使用總結(jié)

 更新時(shí)間:2018年02月28日 14:25:03   作者:佚名-2017_  
本篇文章給大家詳細(xì)講述了python中l(wèi)ogging包的使用的相關(guān)知識點(diǎn)以及原理分析,有興趣的朋友可以參考學(xué)習(xí)下。

1.logging 簡介

Python的logging package提供了通用的日志系統(tǒng),可以方便第三方模塊或者是應(yīng)用使用。這個(gè)模塊提供不同的日志級別,并可以采用不同的方式記錄日志,比如文件,HTTP GET/POST,SMTP,Socket等,甚至可以自己實(shí)現(xiàn)具體的日志記錄方式。

logging包中定義了Logger、Formatter、Handler和Filter等重要的類,除此之外還有config模塊。

Logger是日志對象,直接提供日志記錄操作的接口

Formatter定義日志的記錄格式及內(nèi)容

Handler定義日志寫入的目的地,你可以把日志保存成本地文件,也可以每個(gè)小時(shí)寫一個(gè)日志文件,還可以把日志通過socket傳到別的機(jī)器上。python提供了十幾種實(shí)用handler,比較常用的有StreamHandler,BaseRotatingHandler,SocketHandler,DatagramHandler,SMTPHandler等。我們可以通過Logger對象的addHandler()方法,將log輸出到多個(gè)目的地。

2.Logging package

在python編程中,引入了Logging package,那么可以存在一個(gè)名稱為root的Logging對象,以及很多其他名稱的Logging對象。不同的Logger對象的Handler,F(xiàn)ormatter等是分開設(shè)置的。

(1)logging.getLogger() 如果getLogging中不帶參數(shù),那么返回的是名稱為root的Logger對象,如果帶參數(shù),那么就以該參數(shù)為名稱的Logger對象。同名稱的Logger對象是一樣的。

(2)logging.basicConfig() 此方法是為名稱為root的Logger對象進(jìn)行配置。

(3)logging.info() logging.debug()等,使用的root Logger對象進(jìn)行信息輸出。如果是用其他的Logging對象進(jìn)行l(wèi)og輸出,可以使用Logging.getLogger(name).info()來實(shí)現(xiàn)。

(4)日志的等級

CRITICAL = 50 
ERROR = 40 
WARNING = 30 
INFO = 20 
DEBUG = 10 
NOTSET = 0 

在python中有0,10,20,30,40,50這6個(gè)等級數(shù)值,這6個(gè)等級數(shù)值分別對應(yīng)了一個(gè)字符串常量,作為等級名稱,如上。但是可以通過logging.addLevelName(20, "NOTICE:")這個(gè)方法來改變這個(gè)映射關(guān)系,來定制化日志等級名稱。

通過Logger對象的setLevel()方法,可以配置Logging對象的默認(rèn)日志等級,只有當(dāng)一條日志的等級大于等于這個(gè)默認(rèn)的等級,才會輸出到log文件中。

當(dāng)使用logging.info(msg)輸出log時(shí),內(nèi)部封裝會用數(shù)字20作為日志等級數(shù)值,默認(rèn)情況下20對應(yīng)的是INFO,但如果通過addLevelName()修改了20對應(yīng)的等級名稱,那么log中打印的就將是個(gè)性化的等級名稱。

3.logging包使用配置文件

在1~2中描述的,對一個(gè)Logger對象的Handler,F(xiàn)ormatter等都是在程序中定義或綁定的。而實(shí)際上Logging的個(gè)性化的配置可以放到配置文件中。

logging的配置文件舉例如下:

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

對應(yīng)程序?yàn)椋?/p>

import logging  
import logging.config  
  
logging.config.fileConfig("logging.conf")  # 采用配置文件   
  
# create logger   
logger = logging.getLogger("simpleExample")  
  
# "application" code   
logger.debug("debug message")  
logger.info("info message")  
logger.warn("warn message")  
logger.error("error message")  
logger.critical("critical message") 

4.一個(gè)常用的Logging封裝工具

#!/usr/bin/env python 
#-*- coding:utf-8 -*- 
#coding=utf-8 
 
import logging 
import os 
 
class Logger(object): 
  """ 
  封裝好的Logger工具 
  """ 
 
  def __init__(self, logPath): 
    """ 
    initial 
    """ 
    log_path = logPath 
    logging.addLevelName(20, "NOTICE:") 
    logging.addLevelName(30, "WARNING:") 
    logging.addLevelName(40, "FATAL:") 
    logging.addLevelName(50, "FATAL:") 
    logging.basicConfig(level=logging.DEBUG, 
        format="%(levelname)s %(asctime)s [pid:%(process)s] %(filename)s %(message)s", 
        datefmt="%Y-%m-%d %H:%M:%S", 
        filename=log_path, 
        filemode="a") 
    console = logging.StreamHandler() 
    console.setLevel(logging.DEBUG) 
    formatter = logging.Formatter("%(levelname)s [pid:%(process)s] %(message)s") 
    console.setFormatter(formatter) 
    logging.getLogger("").addHandler(console) 
 
  def debug(self, msg=""): 
    """ 
    output DEBUG level LOG 
    """ 
    logging.debug(str(msg)) 
 
  def info(self, msg=""): 
    """ 
    output INFO level LOG 
    """ 
    logging.info(str(msg)) 
 
  def warning(self, msg=""): 
    """ 
    output WARN level LOG 
    """ 
    logging.warning(str(msg)) 
 
  def exception(self, msg=""): 
    """ 
    output Exception stack LOG 
    """ 
    logging.exception(str(msg)) 
 
  def error(self, msg=""): 
    """ 
    output ERROR level LOG 
    """ 
    logging.error(str(msg)) 
 
  def critical(self, msg=""): 
    """ 
    output FATAL level LOG 
    """ 
    logging.critical(str(msg)) 
   
 
if __name__ == "__main__": 
  testlog = Logger("oupput.log") 
  testlog.info("info....") 
  testlog.warning("warning....") 
  testlog.critical("critical....") 
  try: 
    lists = [] 
    print lists[1] 
  except Exception as ex: 
    """logging.exception()輸出格式: 
    FATAL: [pid:7776] execute task failed. the exception as follows: 
    Traceback (most recent call last): 
      File "logtool.py", line 86, in <module> 
        print lists[1] 
    IndexError: list index out of range 
    """ 
    testlog.exception("execute task failed. the exception as follows:") 
    testlog.info("++++++++++++++++++++++++++++++++++++++++++++++") 
    """logging.error()輸出格式: 
    FATAL: [pid:7776] execute task failed. the exception as follows: 
    """ 
    testlog.error("execute task failed. the exception as follows:") 
    exit(1)

備注:exception()方法能夠完整的打印異常的堆棧信息。error()方法只會打印參數(shù)傳入的信息。

備注:

按照官方文檔的介紹,logging 是線程安全的,也就是說,在一個(gè)進(jìn)程內(nèi)的多個(gè)線程同時(shí)往同一個(gè)文件寫日志是安全的。但是多個(gè)進(jìn)程往同一個(gè)文件寫日志是不安全的。

相關(guān)文章

  • Python2實(shí)現(xiàn)的圖片文本識別功能詳解

    Python2實(shí)現(xiàn)的圖片文本識別功能詳解

    這篇文章主要介紹了Python2實(shí)現(xiàn)的圖片文本識別功能,結(jié)合實(shí)例形式分析了Python pytesser庫的安裝及使用pytesser庫識別圖片文字相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • Python?OpenCV基于HSV的顏色分割實(shí)現(xiàn)示例

    Python?OpenCV基于HSV的顏色分割實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了Python?OpenCV基于HSV的顏色分割實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Python中獲取秒級時(shí)間戳的實(shí)踐指南

    Python中獲取秒級時(shí)間戳的實(shí)踐指南

    在計(jì)算機(jī)編程中,時(shí)間戳是一個(gè)非常重要的概念,它表示自?1970?年?1?月?1?日(UTC)以來經(jīng)過的秒數(shù),在?Python?中,獲取當(dāng)前時(shí)間的時(shí)間戳是一項(xiàng)常見的任務(wù),尤其是在處理日志、數(shù)據(jù)庫時(shí)間戳或者需要時(shí)間同步的場景中,本文介紹了Python中獲取秒級時(shí)間戳的實(shí)踐指南
    2024-12-12
  • Python光學(xué)仿真學(xué)習(xí)衍射算法初步理解

    Python光學(xué)仿真學(xué)習(xí)衍射算法初步理解

    這篇文章主要為大家介紹了Python光學(xué)仿真學(xué)習(xí)中對衍射算法的初步理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • Python?arrow?更好的日期時(shí)間模塊

    Python?arrow?更好的日期時(shí)間模塊

    這篇文章主要為大家介紹Python的arrow日期時(shí)間模塊,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • pyqt5實(shí)現(xiàn)俄羅斯方塊游戲

    pyqt5實(shí)現(xiàn)俄羅斯方塊游戲

    這篇文章主要介紹了pyqt5實(shí)現(xiàn)俄羅斯方塊游戲,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • 樹莓派3 搭建 django 服務(wù)器的實(shí)例

    樹莓派3 搭建 django 服務(wù)器的實(shí)例

    今天小編就為大家分享一篇樹莓派3 搭建 django 服務(wù)器的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 如何在Python中利用matplotlib.pyplot畫出函數(shù)圖詳解

    如何在Python中利用matplotlib.pyplot畫出函數(shù)圖詳解

    通過圖像可以直觀地學(xué)習(xí)函數(shù)變化、分布等規(guī)律,在學(xué)習(xí)函數(shù)、概率分布等方面效果顯著,下面這篇文章主要給大家介紹了關(guān)于如何在Python中利用matplotlib.pyplot畫出函數(shù)圖的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 解析PyCharm Python運(yùn)行權(quán)限問題

    解析PyCharm Python運(yùn)行權(quán)限問題

    這篇文章主要介紹了PyCharm Python運(yùn)行權(quán)限問題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Pandas數(shù)據(jù)集的分塊讀取的實(shí)現(xiàn)

    Pandas數(shù)據(jù)集的分塊讀取的實(shí)現(xiàn)

    本文主要介紹了Pandas數(shù)據(jù)集的分塊讀取的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08

最新評論

珲春市| 琼海市| 台东县| 河东区| 佛山市| 青冈县| 章丘市| 清镇市| 平潭县| 鱼台县| 广河县| 陈巴尔虎旗| 闻喜县| 宁德市| 连城县| 鲁山县| 万盛区| 丰原市| 太仆寺旗| 阿鲁科尔沁旗| 西林县| 柘城县| 盐津县| 常德市| 潮安县| 萨嘎县| 宜川县| 隆尧县| 上林县| 柳林县| 陕西省| 白朗县| 宁津县| 洪泽县| 谢通门县| 巢湖市| 静海县| 宝兴县| 达拉特旗| 射洪县| 芜湖市|