1. 程式人生 > >Python模組學習:logging 日誌記錄

Python模組學習:logging 日誌記錄

許多應用程式中都會有日誌模組,用於記錄系統在執行過程中的一些關鍵資訊,以便於對系統的執行狀況進行跟蹤。在.NET平臺中,有非常著名的第三方開源日誌元件log4net,c++中,有人們熟悉的log4cpp,而在python中,我們不需要第三方的日誌元件,因為它已經為我們提供了簡單易用、且功能強大的日誌模組:logging。logging模組支援將日誌資訊儲存到不同的目標域中,如:儲存到日誌檔案中;以郵件的形式傳送日誌資訊;以http get或post的方式提交日誌到web伺服器;以windows事件的形式記錄等等。這些日誌儲存方式可以組合使用,每種方式可以設定自己的日誌級別以及日誌格式。日誌模組的內容比較多,今天先學習logging模組的基本使用,下次具體學習日誌的處理。

先看一個比較簡單的例子,讓我們對logging模組有個感性的認識:

import logging

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

logging.debug('this is a message')

執行上面例子的程式碼,將會在程式的根目錄下建立一個log.txt檔案,開啟該檔案,裡面有一條日誌記錄:”DEBUG:root:this is a message”。

4個主要的元件

logger: 日誌類,應用程式往往通過呼叫它提供的api來記錄日誌;

handler: 對日誌資訊處理,可以將日誌傳送(儲存)到不同的目標域中;

filter: 對日誌資訊進行過濾;

formatter:日誌的格式化;

日誌級別

在記錄日誌時, 日誌訊息都會關聯一個級別(“級別”本質上是一個非負整數)。系統預設提供了6個級別,它們分別是:

級別 對應的值
CRITICAL 50
ERROR 40
WARNING 30
INFO 20
DEBUG 10
NOTSET 0

可以給日誌物件(Logger Instance)設定日誌級別,低於該級別的日誌訊息將會被忽略,也可以給Hanlder設定日誌級別,對於低於該級別的日誌訊息, Handler也會忽略。

logging模組中的常用函式:

logging.basicConfig([**kwargs]):

為日誌模組配置基本資訊。kwargs 支援如下幾個關鍵字引數:


filename :日誌檔案的儲存路徑。如果配置了些引數,將自動建立一個FileHandler作為Handler;
filemode :日誌檔案的開啟模式。 預設值為’a',表示日誌訊息以追加的形式新增到日誌檔案中。如果設為’w', 那麼每次程式啟動的時候都會建立一個新的日誌檔案;
format :設定日誌輸出格式;
datefmt :定義日期格式;
level :設定日誌的級別.對低於該級別的日誌訊息將被忽略;
stream :設定特定的流用於初始化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')

#----- 結果

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

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

logging.getLogger([name])

建立Logger物件。日誌記錄的工作主要由Logger物件來完成。在呼叫getLogger時要提供Logger的名稱(注:多次使用相同名稱來呼叫getLogger,返回的是同一個物件的引用。),Logger例項之間有層次關係,這些關係通過Logger名稱來體現,如:

p = logging.getLogger(“root”)

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

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

例子中,p是父logger, c1,c2分別是p的子logger。c1, c2將繼承p的設定。如果省略了name引數, getLogger將返回日誌物件層次關係中的根Logger。

logging.setLoggerClass(klass)

logging.getLoggerClass()

獲取/設定日誌型別。使用者可以自定義日誌類來代替系統提供的logging.Logger類。

logging.getLevelName(lvl)

獲取日誌級別對應的名稱。例如:

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()

當不再使用日誌系統的時候,呼叫該方法,它會將日誌flush到對應的目標域上。一般在系統退出的時候呼叫。

Logger物件 通過呼叫logging.getLogger(name)來建立,它有如下常用的方法和屬性:

Logger.setLevel(lvl):

設定日誌的級別。對於低於該級別的日誌訊息將被忽略。下面一個例子演示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級別的日誌資訊。引數msg是資訊的格式,args與kwargs分別是格式引數。

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] ] )

記錄相應級別的日誌資訊。引數的含義與Logger.debug一樣.

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

記錄日誌,引數lvl使用者設定日誌資訊的級別。引數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])

建立LogRecord物件。日誌訊息被例項為一個LogRecord物件,並在日誌類內處理。

轉自:http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=208284200&idx=2&sn=79a178cf812b42f656c664121436b440&scene=1&key=af154fdc40fed003215087502a3b992cc0e17fb897be0ae7d4e1c915be4dae50b7fa4e6da2eafbcf05441bfe35e01b78&ascene=0&uin=MjQ4MDMyMzQyMg%3D%3D&devicetype=iMac+MacBookPro11%2C1+OSX+OSX+10.10.3+build(14D136)&version=11020012&pass_ticket=jQm%2Be96Qyu2y5zEaXL4dwURAzMUT44q9U4AWZJ8V11PbJvxc1GDuuFNanUZLrjVO

相關推薦

Python模組學習logging 日誌記錄

許多應用程式中都會有日誌模組,用於記錄系統在執行過程中的一些關鍵資訊,以便於對系統的執行狀況進行跟蹤。在.NET平臺中,有非常著名的第三方開源日誌元件log4net,c++中,有人們熟悉的log4cpp,而在python中,我們不需要第三方的日誌元件,因為它已經為我們提供

python系統學習模組積累(持續更新)

# Author : Sunny# 模組初識'''模組 = 庫分為標準庫(自帶,匯入即可)/第三方庫(必須安裝才可使用)'''# 標準庫之sys模組import sys# sys.pyth 會輸出路徑(環境變數):包括標準庫的路徑、第三方庫的路徑print(sys.path)# sys.argv 會輸出當

python】詳解logging日誌模組

最近看了崔慶才的網站,個人認為博主的寫的非常的好,本文基於博主的文章Python中logging模組的基本用法進行學習和改造。 1、日誌記錄的重要性 在開發過程中,如果程式執行出現了問題,我們是可以使用我們自己的 Debug 工具來檢測到到底是哪一步出現了問題,如果出現了問題的話

Python模組學習——logging

logging模組是在2.3新引進的功能,下面是一些常用的類和模組級函式 模組級函式 logging.getLogger([name]):返回一個logger物件,如果沒有指定名字將返回root logger logging.debug()、logging.in

Python基礎學習glob模組

資原始碼:Lib/glob.py     glob模組找出所有的匹配Unix shell的特殊模式的路徑名,但是結果返回的順序不定。沒有波浪號擴充套件被使用,但是*、?和用[]包裹範圍內的字元會被正確的匹配。這個用法通過os.scandir()和fnmatch.fnmatc

Python基礎學習tempfile模組

資原始碼:Lib/tempfile.py     該模組用於建立臨時檔案和目錄。它在所有支撐平臺上都可以工作。TemporaryFile、NamedTemporaryFile、TemporaryDirectory和SpooledTemporaryFile是提供自動化清理的高

python logging日誌記錄

日誌logging模組 日誌記錄的作用:基本上就是收集與程式執行有關的資料,這樣可以在隨後進行檢查(或者累計資料) logging.basicConfig函式的配置:filename:指定日誌檔名filemode:指定日誌檔案的開啟模式,‘w’或‘a’format:指定輸出格式和內容,format可以輸出

core學習歷程五 從壹開始前後端分離【 .NET Core2.0 +Vue2.0 】框架之十 || AOP面向切面程式設計淺解析簡單日誌記錄 + 服務切面快取 從壹開始前後端分離【 .NET Core2.0 +Vue2.0 】框架之十一 || AOP自定義篩選,Redis入門 11.1

繼續學習 “老張的哲學”博主的系列教程,感謝大神們的無私分享 從壹開始前後端分離【 .NET Core2.0 +Vue2.0 】框架之十 || AOP面向切面程式設計淺解析:簡單日誌記錄 + 服務切面快取 說是朦朧,,emmm,對我來說是迷糊哈。上半段正常,下半段有點難理解,操作是沒問題。多看幾遍再消

csv模組學習Python學習筆記—CSV模組讀寫資料

CSV模組是Python的內建模組,直接import csv就可呼叫。csv模組主要就兩個函式:csv.reader()——讀取csv檔案資料,csv.writer()——寫入csv檔案資料。簡單實用。 一、讀取CSV 語法:csv.reader(iterable[,

Python基礎學習linecache模組

                            linecache——對文字行的隨機訪問 資原始碼:Lib/linecache.py     linecache模組允許它獲取Python資原始檔的任一行。當系統試圖進行內部優化時,就會使用一個快取記憶體。在通常情況

Python基礎學習numbers模組

numbers——數字抽象基類,其原始碼儲存在:Lib/numbers.pynumbers模組定義了數字抽象基類的層次結構,逐漸定義更多的操作。該模組中定義的任何型別都不能例項化。1.數字塔class numbers.Complex       數字的一個子類,用來描述複數以

python介面自動化】- logging日誌模組

> 前言:我們之前執行程式碼時都是將日誌直接輸出到控制檯,而實際專案中常常需要把日誌儲存到檔案,便於查閱,如執行時間、描述資訊以及錯誤或者異常發生時候的特定上下文資訊。 # logging模組介紹 ​ Python中自帶的logging模組提供了標準的日誌介面,在debug時使用往往會事半功倍。為什麼不

Python模塊logging

logging onf () roo 指定 綁定 out tde password logging模塊: 很多程序都有記錄日誌的需求,並且日誌中包含的信息既有正常的程序訪問日誌,還可能有錯誤、警告等信息輸出。Python的logging模塊提供了標準的日誌接口,你可以通

Python機器學習5.6 使用核PCA進行非線性映射

公式 有一個 內容 原來 相關 ref and analysis 分類 許多機器學習算法都有一個假設:輸入數據要是線性可分的。感知機算法必須針對完全線性可分數據才能收斂。考慮到噪音,Adalien、邏輯斯蒂回歸和SVM並不會要求數據完全線性可分。 但是現實生活中有大量的非線

Python機器學習6.6 不同的性能評價指標

learning 分享 混淆矩陣 sklearn fusion 性能 www. onf 準確率 在前面幾個章節,我們一直使用準確率(accuracy)來評價模型的性能,通常這是一個不錯的選擇。除此之外,還有不少評價指標哦,比如查準率(precision)、查全率(recal

Python機器學習7.2 結合不同的分類算法進行投票

機器學習 div blog 我們 mac .com nts sep section 這一節學習使用sklearn進行投票分類,看一個具體的例子,數據集采用Iris數據集,只使用sepal width和petal length兩個維度特征,類別我們也只是用兩類:Iris-Ve

Python機器學習7.1 集成學習

src 概率 森林 技術分享 ali 集成學習 tag 相關 目錄 集成學習背後的思想是將不同的分類器進行組合得到一個元分類器,這個元分類器相對於單個分類器擁有更好的泛化性能。比如,假設我們從10位專家那裏分別得到了對於某個事件的預測結果,集成學習能夠對這10個預測結果進行

Python機器學習5.9 sklearn中的核PCA

sklearn 不同 圖片 html post 技術分享 posit src 數據 sklearn.decomposition中有核PCA的實現,看看怎麽用: 通過kernel參數設定不同的核函數。 將轉換後的數據可視化: Python機器學習中文版目錄(http://

Python機器學習6.3 使用學習曲線和驗證曲線 調試算法

畫出 很好 pos 正則 log gin htm 設置 valid 這一節我們學習兩個非常有用的診斷方法,可以用來提高算法的表現。他們就是學習曲線(learning curve)和驗證曲線(validation curve)。學習曲線可以判斷學習算法是否過擬合或者欠擬合。

python爬蟲學習第一爬_快眼看書排行榜

font n) 對象 file 叠代器 get quest client 有一個 1 import json 2 import re 3 from urllib.request import urlopen # urllib用法:https://www.jb5