python中關於logging函式庫的使用總結

黄舟
發布: 2017-10-18 11:02:11
原創
1699 人瀏覽過

Python的logging模組提供了通用的日誌系統,可以方便第三方模組或者是應用使用,下面這篇文章主要給大家介紹了關於python中logging庫使用的一些知識總結,文中給出了詳細的範例程式碼,需要的朋友可以參考借鑒,下面來一起看看吧。

前言

最近因為工作的需要,在寫一些python腳本,總是使用print來列印訊息感覺很low,所以抽空研究了一下python的logging庫,來優雅的來列印和記錄日誌,下面話不多說了,來一起看看詳細的介紹吧。

一、簡單的將日誌印到螢幕:


import logging

logging.debug('This is debug message')  #debug
logging.info('This is info message')   #info
logging.warning('This is warning message') #warn
登入後複製

螢幕上列印:WARNING:root:This is warning message

預設情況下,會列印WARNING層級的日誌

  • DEBUG:詳細資訊,調試資訊。

  • INFO:確認一切如預期運作。

  • WARNING:表示發生了一些意外,或在不久的將來會發生問題(如『磁碟滿了』)。軟體還是在正常工作。

  • ERROR:由於更嚴重的問題,軟體已經不能執行一些功能了。

  • CRITICAL:嚴重錯誤,表示軟體已無法繼續運作了。

二、透過basicConfig函數來對日誌的輸入格式和方法進行配置


##

import logging

logging.basicConfig(level=logging.DEBUG,
    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
    datefmt='%Y-%m-%d %a %H:%M:%S',
    filename='test.log',
    filemode='w')
 
logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')
登入後複製

以上程式碼不會在螢幕上列印日誌,而是會在目前目錄產生test.log的日誌文件,日誌被印在日誌檔案中:


#2017 -10-16 Mon 10:05:17 testlogging.py[line:25] DEBUG This is debug message


2017-10-16 Mon 10:05:17 testlogging.py[line:26 ] INFO This is info message


2017-10-16 Mon 10:05:17 testlogging.py[line:27] WARNING This is warning message

  • # #logging.basicConfig函數各參數:

  • ##filename: 指定日誌檔案名稱
  • filemode: 和file函數意義相同,指定日誌檔案的開啟模式,'w'或'a'


format: 指定輸出的格式和內容,format可以輸出很多有用訊息,如上例所示:
  •  %(levelno)s: 打印日志级别的数值
     %(levelname)s: 打印日志级别名称
     %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
     %(filename)s: 打印当前执行程序名
     %(funcName)s: 打印日志的当前函数
     %(lineno)d: 打印日志的当前行号
     %(asctime)s: 打印日志的时间
     %(thread)d: 打印线程ID
     %(threadName)s: 打印线程名称
     %(process)d: 打印进程ID
     %(message)s: 打印日志信息
    登入後複製

  • datefmt: 指定時間格式,同time.strftime()
  • level: 設定日誌等級,預設為logging.WARNING

stream: 指定將日誌的輸出流,可以指定輸出到sys.stderr,sys.stdout或文件,預設輸出到sys.stderr,當stream和filename同時指定時,stream被忽略


三、同時將日誌輸出到螢幕和日誌檔案



#定义一个StreamHandler,将INFO级别或更高的日志信息打印到标准错误,并将其添加到当前的日志处理对象
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
登入後複製

插入以上程式碼就可以同時在螢幕上列印出日誌

#畫面上列印:

root : INFO This is info message

root : WARNING This is warning message

檔案中列印:

2017-10-16 Mon 10: 20:07 testlogging.py[line:46] DEBUG This is debug message

2017-10-16 Mon 10:20:07 testlogging.py[line:47] INFO This is info message
2017-10-16 Mon 10:20:07 testlogging.py[line:48] WARNING This is warning message


#四、透過設定檔配置日誌


  • #logger.conf
    [loggers]
    #定义logger模块,root是父类,必需存在的,其它的是自定义。 
    keys=root,infoLogger,warnlogger
    
    [logger_root] 
    level=DEBUG       #level  级别,级别有DEBUG、INFO、WARNING、ERROR、CRITICAL
    handlers=infohandler,warnhandler #handlers 处理类,可以有多个,用逗号分开
    
    [logger_infoLogger]     #[logger_xxxx] logger_模块名称
    handlers=infohandler
    qualname=infoLogger     #qualname logger名称,应用程序通过 logging.getLogger获取。对于不能获取的名称,则记录到root模块。
    propagate=0       #propagate 是否继承父类的log信息,0:否 1:是
    
    [logger_warnlogger]
    handlers=warnhandler
    qualname=warnlogger
    propagate=0
    
    ###############################################
    #定义handler
    [handlers]
    keys=infohandler,warnhandler
    
    [handler_infohandler]
    class=StreamHandler     #class handler类名
    level=INFO       #level 日志级别
    formatter=form02      #formatter,下面定义的formatter
    args=(sys.stdout,)     #args handler初始化函数参数
    
    [handler_warnhandler]
    class=FileHandler
    level=WARN
    formatter=form01
    args=('logs/deploylog.log', 'a')
    
    ###############################################
    # 定义格式化输出
    [formatters]
    keys=form01,form02
    
    [formatter_form01]
    format=%(message)s %(asctime)s
    datefmt=%Y-%m-%d %H:%M:%S
    
    [formatter_form02]
    format=%(asctime)s %(levelname)s %(message)s
    datefmt=%Y-%m-%d %H:%M:%S
    登入後複製

    日誌格式
  • %(asctime)s 年-月-日時-分-秒,毫秒2013-04-26 20:10:43,745
  • %(filename)s 檔名,不含目錄
  • %(pathname)s 目錄名,完整路徑
  • %(funcName)s 函式名
  • ##%(levelname) s 等級名稱
  • %(lineno)d 行號
  • #%(module)s 模組名稱
  • %(message)s 訊息體
  • %(name)s 日誌模組名稱
  • %(process)d 進程id
  • %(processName)s 行程名稱
  • %(thread)d 執行緒id

% (threadName)s 執行緒名稱


測試設定檔#

from logging.config import fileConfig

fileConfig('logger.conf')
logger=logging.getLogger('infoLogger')
logger.info('test1')
logger_error=logging.getLogger('warnhandler')
logger_error.warn('test5')
登入後複製
#####總結###### ###

以上是python中關於logging函式庫的使用總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板