欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python標(biāo)準(zhǔn)日志模塊logging的使用方法

 更新時(shí)間:2013年11月01日 09:48:47   作者:  
python的標(biāo)準(zhǔn)庫里的日志系統(tǒng)從Python2.3開始支持。只要import logging這個(gè)模塊即可使用。

最近寫一個(gè)爬蟲系統(tǒng),需要用到python的日志記錄模塊,于是便學(xué)習(xí)了一下。
python的標(biāo)準(zhǔn)庫里的日志系統(tǒng)從Python2.3開始支持。只要import logging這個(gè)模塊即可使用。如果你想開發(fā)一個(gè)日志系統(tǒng), 既要把日志輸出到控制臺(tái), 還要寫入日志文件,只要這樣使用:

復(fù)制代碼 代碼如下:

import logging
# 創(chuàng)建一個(gè)logger
logger = logging.getLogger('mylogger')
logger.setLevel(logging.DEBUG)
# 創(chuàng)建一個(gè)handler,用于寫入日志文件
fh = logging.FileHandler('test.log')
fh.setLevel(logging.DEBUG)
# 再創(chuàng)建一個(gè)handler,用于輸出到控制臺(tái)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# 定義handler的輸出格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
# 給logger添加handler
logger.addHandler(fh)
logger.addHandler(ch)
# 記錄一條日志
logger.info('foorbar')

結(jié)合上面的例子,我們說下幾個(gè)最常使用的API:
  logging.getLogger([name])
  返回一個(gè)logger實(shí)例,如果沒有指定name,返回root logger。只要name相同,返回的logger實(shí)例都是同一個(gè)而且只有一個(gè),即name和logger實(shí)例是一一對(duì)應(yīng)的。這意味著,無需把logger實(shí)例在各個(gè)模塊中傳遞。只要知道name,就能得到同一個(gè)logger實(shí)例。
  Logger.setLevel(lvl)
  設(shè)置logger的level, level有以下幾個(gè)級(jí)別:
    
  級(jí)別高低順序:NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL
  如果把looger的級(jí)別設(shè)置為INFO, 那么小于INFO級(jí)別的日志都不輸出, 大于等于INFO級(jí)別的日志都輸出  
復(fù)制代碼 代碼如下:

logger.debug("foobar")    # 不輸出  
logger.info("foobar")        # 輸出 
logger.warning("foobar")  # 輸出 
logger.error("foobar")      # 輸出 
logger.critical("foobar")    # 輸出 

Logger.addHandler(hdlr)
通過handler對(duì)象可以把日志內(nèi)容寫到不同的地方。比如簡單的StreamHandler就是把日志寫到類似文件的地方。python提供了十幾種實(shí)用handler,比較常用有:
復(fù)制代碼 代碼如下:

StreamHandler: 輸出到控制臺(tái)
 FileHandler:   輸出到文件
BaseRotatingHandler 可以按時(shí)間寫入到不同的日志中。比如將日志按天寫入不同的日期結(jié)尾的文件文件。
SocketHandler 用TCP網(wǎng)絡(luò)連接寫LOG
DatagramHandler 用UDP網(wǎng)絡(luò)連接寫LOG
SMTPHandler 把LOG寫成EMAIL郵寄出去

logging.basicConfig([**kwargs])* 這個(gè)函數(shù)用來配置root logger, 為root logger創(chuàng)建一個(gè)StreamHandler,設(shè)置默認(rèn)的格式。* 這些函數(shù): logging.debug()、logging.info()、logging.warning()、logging.error()、logging.critical() 如果調(diào)用的時(shí)候發(fā)現(xiàn)root logger沒有任何handler,會(huì)自動(dòng)調(diào)用basicConfig添加一個(gè)handler* 如果root logger已有handler,這個(gè)函數(shù)不做任何事情使用basicConfig來配置root logger的輸出格式和level:
復(fù)制代碼 代碼如下:

import logging
logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG)
logging.debug('This message should appear on the console')

ogger對(duì)象直接提供日志接口。formatter描述日志的格式。handler把日志寫到不同的地方,你可以把日志保存成本地文件,也可以每個(gè)小時(shí)寫一個(gè)日志文件,還可以把日志通過socket傳到別的機(jī)器上。
從最簡單的formatter對(duì)象來看。formatter指定的是每一條日志記錄的抬頭信息,也就是你可以指定日志記錄的時(shí)間格式、進(jìn)程號(hào)、文件名、函數(shù)名等信息。可以用這個(gè)方法來創(chuàng)建一個(gè)formatter對(duì)象:
復(fù)制代碼 代碼如下:

logging.Formatter.__init__( fmt=None, datefmt=None)

fmt參數(shù)指定進(jìn)程號(hào)、文件名、函數(shù)名等信息是否出現(xiàn)以及格式, datefmt為日期時(shí)間格式,默認(rèn)的日期格式精確到微秒,例如‘2003-07-08 16:49:45,896'。fmt中可以指定多個(gè)字段,每個(gè)字段的格式為“%(<dictionary key>)s”, 例如你想打印時(shí)間、日志級(jí)別、日志信息可以用下面的format:
復(fù)制代碼 代碼如下:

'%(asctime)s - %(levelname)s - %(message)s'

在記錄爬蟲系統(tǒng)日志的時(shí)候需要定義記錄日志的級(jí)別,級(jí)別越高表示打出來的日志越詳細(xì)。我們可以用一個(gè)字典來設(shè)置不同級(jí)別對(duì)應(yīng)的不同日志信息:
復(fù)制代碼 代碼如下:

#用字典保存日志級(jí)別
format_dict = {
   1 : logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'),
   2 : logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'),
   3 : logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'),
   4 : logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'),
   5 : logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
}

將本文開始的代碼封裝在一個(gè)類中
復(fù)制代碼 代碼如下:

#開發(fā)一個(gè)日志系統(tǒng), 既要把日志輸出到控制臺(tái), 還要寫入日志文件  
class Logger():
    def __init__(self, logname, loglevel, logger):
        '''
           指定保存日志的文件路徑,日志級(jí)別,以及調(diào)用文件
           將日志存入到指定的文件中
        '''

        # 創(chuàng)建一個(gè)logger
        self.logger = logging.getLogger(logger)
        self.logger.setLevel(logging.DEBUG)

        # 創(chuàng)建一個(gè)handler,用于寫入日志文件
        fh = logging.FileHandler(logname)
        fh.setLevel(logging.DEBUG)

        # 再創(chuàng)建一個(gè)handler,用于輸出到控制臺(tái)
        ch = logging.StreamHandler()
        ch.setLevel(logging.DEBUG)

        # 定義handler的輸出格式
        #formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
        formatter = format_dict[int(loglevel)]
        fh.setFormatter(formatter)
        ch.setFormatter(formatter)

        # 給logger添加handler
        self.logger.addHandler(fh)
        self.logger.addHandler(ch)

   
    def getlog(self):
        return self.logger

再通過以下方式調(diào)用,便是一個(gè)簡單的日志系統(tǒng)了
復(fù)制代碼 代碼如下:

logger = Logger(logname='log.txt', loglevel=1, logger="fox").getlog()

相關(guān)文章

  • 最新pycharm安裝教程

    最新pycharm安裝教程

    這篇文章主要介紹了最新pycharm安裝教程,需要的朋友可以參考下
    2020-11-11
  • 詳解Django配置JWT認(rèn)證方式

    詳解Django配置JWT認(rèn)證方式

    這篇文章主要介紹了Django 配置JWT認(rèn)證方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Python 如何求矩陣的逆

    Python 如何求矩陣的逆

    這篇文章主要介紹了Python 如何求矩陣的逆案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python對(duì)數(shù)據(jù)進(jìn)行插值和下采樣的方法

    Python對(duì)數(shù)據(jù)進(jìn)行插值和下采樣的方法

    今天小編就為大家分享一篇Python對(duì)數(shù)據(jù)進(jìn)行插值和下采樣的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python實(shí)現(xiàn)圖算法、堆操作和并查集代碼實(shí)例

    Python實(shí)現(xiàn)圖算法、堆操作和并查集代碼實(shí)例

    這篇文章主要介紹了Python實(shí)現(xiàn)圖算法、堆操作和并查集代碼實(shí)例,圖算法、堆操作和并查集是計(jì)算機(jī)科學(xué)中常用的數(shù)據(jù)結(jié)構(gòu)和算法,它們?cè)诮鉀Q各種實(shí)際問題中具有重要的應(yīng)用價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Python version 2.7 required, which was not found in the registry

    Python version 2.7 required, which was not found in the regi

    這篇文章主要介紹了安裝PIL庫時(shí)提示錯(cuò)誤Python version 2.7 required, which was not found in the registry問題的解決方法,需要的朋友可以參考下
    2014-08-08
  • zookeeper python接口實(shí)例詳解

    zookeeper python接口實(shí)例詳解

    這篇文章主要介紹了zookeeper python接口實(shí)例詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Python 使用ConfigParser操作ini配置文件

    Python 使用ConfigParser操作ini配置文件

    這篇文章主要介紹了Python 使用ConfigParser操作ini配置文件的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • 在 Python 中使用 MQTT的方法

    在 Python 中使用 MQTT的方法

    這篇文章主要介紹了在 Python 中使用 MQTT的方法,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-08-08
  • Python入門之三角函數(shù)全解【收藏】

    Python入門之三角函數(shù)全解【收藏】

    這篇文章主要介紹了Python入門之三角函數(shù)全解【收藏】,還是比較全面的,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11

最新評(píng)論