日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

python程序员的工作内容_每个Python程序员都要知道的日志实践

發(fā)布時間:2023/11/27 生活经验 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python程序员的工作内容_每个Python程序员都要知道的日志实践 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

許多應(yīng)用程序中都會有日志模塊,用于記錄系統(tǒng)在運(yùn)行過程中的一些關(guān)鍵信息,以便于對系統(tǒng)的運(yùn)行狀況進(jìn)行跟蹤。在.NET平臺中,有非常著名的第三方開源日志組件log4net,c++中,有人們熟悉的log4cpp,而在python中,我們不需要第三方的日志組件,因為它已經(jīng)為我們提供了簡單易用、且功能強(qiáng)大的日志模塊:logging。logging模塊支持將日志信息保存到不同的目標(biāo)域中,如:保存到日志文件中;以郵件的形式發(fā)送日志信息;以http get或post的方式提交日志到web服務(wù)器;以windows事件的形式記錄等等。這些日志保存方式可以組合使用,每種方式可以設(shè)置自己的日志級別以及日志格式。日志模塊的內(nèi)容比較多,今天先學(xué)習(xí)logging模塊的基本使用,下次具體學(xué)習(xí)日志的處理。

先看一個比較簡單的例子,讓我們對logging模塊有個感性的認(rèn)識:

import logging

logging.basicConfig(filename = os.path.join(os.getcwd(), 'log.txt'), level = logging.DEBUG)

logging.debug('this is a message')

運(yùn)行上面例子的代碼,將會在程序的根目錄下創(chuàng)建一個log.txt文件,打開該文件,里面有一條日志記錄:”DEBUG:root:this is a message”。

4個主要的組件

logger: 日志類,應(yīng)用程序往往通過調(diào)用它提供的api來記錄日志;

handler: 對日志信息處理,可以將日志發(fā)送(保存)到不同的目標(biāo)域中;

filter: 對日志信息進(jìn)行過濾;

formatter:日志的格式化;

日志級別

在記錄日志時, 日志消息都會關(guān)聯(lián)一個級別(“級別”本質(zhì)上是一個非負(fù)整數(shù))。系統(tǒng)默認(rèn)提供了6個級別,它們分別是:

可以給日志對象(Logger Instance)設(shè)置日志級別,低于該級別的日志消息將會被忽略,也可以給Hanlder設(shè)置日志級別,對于低于該級別的日志消息, Handler也會忽略。

logging模塊中的常用函數(shù):

logging.basicConfig([**kwargs]):

為日志模塊配置基本信息。kwargs 支持如下幾個關(guān)鍵字參數(shù):

filename :日志文件的保存路徑。如果配置了些參數(shù),將自動創(chuàng)建一個FileHandler作為Handler;

filemode :日志文件的打開模式。 默認(rèn)值為’a’,表示日志消息以追加的形式添加到日志文件中。如果設(shè)為’w’, 那么每次程序啟動的時候都會創(chuàng)建一個新的日志文件;

format :設(shè)置日志輸出格式;

datefmt :定義日期格式;

level :設(shè)置日志的級別.對低于該級別的日志消息將被忽略;

stream :設(shè)置特定的流用于初始化StreamHandler;

下面是一個簡單的例子:

#coding=gbk

import logging

logging.basicConfig(filename = os.path.join(os.getcwd(), 'log.txt'), /

level = logging.WARN, filemode = 'w', format = '%(asctime)s - %(levelname)s: %(message)s')

logging.debug('debug')

#被忽略

logging.info('info')

#被忽略

logging.warning('warn')

logging.error('error')

#----- 結(jié)果

#2009-07-13 21:42:15,592 - WARNING: warn

#2009-07-13 21:42:15,640 - ERROR: error

logging.getLogger([name])

創(chuàng)建Logger對象。日志記錄的工作主要由Logger對象來完成。在調(diào)用getLogger時要提供Logger的名稱(注:多次使用相同名稱來調(diào)用getLogger,返回的是同一個對象的引用。),Logger實例之間有層次關(guān)系,這些關(guān)系通過Logger名稱來體現(xiàn),如:

p = logging.getLogger(“root”)

c1 = logging.getLogger(“root.c1″)

c2 = logging.getLogger(“root.c2″)

例子中,p是父logger, c1,c2分別是p的子logger。c1, c2將繼承p的設(shè)置。如果省略了name參數(shù), getLogger將返回日志對象層次關(guān)系中的根Logger。

logging.setLoggerClass(klass)

logging.getLoggerClass()

獲取/設(shè)置日志類型。用戶可以自定義日志類來代替系統(tǒng)提供的logging.Logger類。

logging.getLevelName(lvl)

獲取日志級別對應(yīng)的名稱。例如:

print logging.getLevelName(logging.NOTSET)

print logging.getLevelName(10)

#logging.DEBUG

print logging.getLevelName(logging.DEBUG)

print logging.getLevelName(30)

#logging.WARN

print logging.getLevelName(logging.ERROR)

print logging.getLevelName(50)

#logging.CRITICAL

logging.shutdown()

當(dāng)不再使用日志系統(tǒng)的時候,調(diào)用該方法,它會將日志flush到對應(yīng)的目標(biāo)域上。一般在系統(tǒng)退出的時候調(diào)用。

Logger對象 通過調(diào)用logging.getLogger(name)來創(chuàng)建,它有如下常用的方法和屬性:

Logger.setLevel(lvl):

設(shè)置日志的級別。對于低于該級別的日志消息將被忽略。下面一個例子演示setLevel方法:

#coding=gbk

import logging

logging.basicConfig(filename = os.path.join(os.getcwd(), 'log.txt'), level = logging.DEBUG)

log = logging.getLogger('root.test')

log.setLevel(logging.WARN) #日志記錄級別為WARNNING

log.info('info') #不會被記錄

log.debug('debug') #不會被記錄

log.warning('warnning')

log.error('error')

Logger.debug(msg [ ,*args [, **kwargs]])

記錄DEBUG級別的日志信息。參數(shù)msg是信息的格式,args與kwargs分別是格式參數(shù)。

import logging

logging.basicConfig(filename = os.path.join(os.getcwd(), 'log.txt'), level = logging.DEBUG)

log = logging.getLogger('root')

log.debug('%s, %s, %s', *('error', 'debug', 'info'))

log.debug('%(module)s, %(info)s', {'module': 'log', 'info': 'error'})

Logger.info(msg[ , *args[ , **kwargs] ] )

Logger.warnning(msg[ , *args[ , **kwargs] ] )

Logger.error(msg[ , *args[ , **kwargs] ] )

Logger.critical(msg[ , *args[ , **kwargs] ] )

記錄相應(yīng)級別的日志信息。參數(shù)的含義與Logger.debug一樣。

Logger.log(lvl, msg[ , *args[ , **kwargs] ] )

記錄日志,參數(shù)lvl用戶設(shè)置日志信息的級別。參數(shù)msg, *args, **kwargs的含義與Logger.debug一樣。

Logger.exception(msg[, *args])

以ERROR級別記錄日志消息,異常跟蹤信息將被自動添加到日志消息里。Logger.exception通過用在異常處理塊中,如:

import logging

logging.basicConfig(filename = os.path.join(os.getcwd(), 'log.txt'), level = logging.DEBUG)

log = logging.getLogger('root')

try:

raise Exception, 'this is a exception'

except:

log.exception('exception')

#異常信息被自動添加到日志消息中

Logger.addFilter(filt)

Logger.removeFilter(filt)

添加/移除日志消息過濾器。在講述Filter時具體介紹。

Logger.addHandler(hdlr)

Logger.removeHandler(hdlr)

添加/移除日志消息處理器。在講述Handler時具體介紹。

Logger.makeRecord(name, lvl, fn, lno, msg, args, exc_info[, func, extra])

創(chuàng)建LogRecord對象。日志消息被實例為一個LogRecord對象,并在日志類內(nèi)處理。

總結(jié)

以上是生活随笔為你收集整理的python程序员的工作内容_每个Python程序员都要知道的日志实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。