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

python中l(wèi)ogging模塊的一些簡單用法的使用

 更新時間:2019年02月22日 09:36:47   作者:加班使我變丑智商下降  
這篇文章主要介紹了python中l(wèi)ogging模塊的一些簡單用法的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

用Python寫代碼的時候,在想看的地方寫個print xx 就能在控制臺上顯示打印信息,這樣子就能知道它是什么了,但是當我需要看大量的地方或者在一個文件中查看的時候,這時候print就不大方便了,所以Python引入了logging模塊來記錄我想要的信息。

print也可以輸入日志,logging相對print來說更好控制輸出在哪個地方,怎么輸出及控制消息級別來過濾掉那些不需要的信息。

1、日志級別

默認生成的root logger的level是logging.WARNING,低于該級別的就不輸出了

級別排序:CRITICAL > ERROR > WARNING > INFO > DEBUG

debug : 打印全部的日志,詳細的信息,通常只出現(xiàn)在診斷問題上

info : 打印info,warning,error,critical級別的日志,確認一切按預期運行

warning : 打印warning,error,critical級別的日志,一個跡象表明,一些意想不到的事情發(fā)生了,或表明一些問題在不久的將來(例如。磁盤空間低”),這個軟件還能按預期工作

error : 打印error,critical級別的日志,更嚴重的問題,軟件沒能執(zhí)行一些功能

critical : 打印critical級別,一個嚴重的錯誤,這表明程序本身可能無法繼續(xù)運行

這時候,如果需要顯示低于WARNING級別的內(nèi)容,可以引入NOTSET級別來顯示:

import logging # 引入logging模塊
logging.basicConfig(level=logging.NOTSET) # 設(shè)置日志級別
logging.debug(u"如果設(shè)置了日志級別為NOTSET,那么這里可以采取debug、info的級別的內(nèi)容也可以顯示在控制臺上了")

回顯:

2、部分名詞解釋

Logging.Formatter:這個類配置了日志的格式,在里面自定義設(shè)置日期和時間,輸出日志的時候?qū)凑赵O(shè)置的格式顯示內(nèi)容。

Logging.Logger:Logger是Logging模塊的主體,進行以下三項工作:

1. 為程序提供記錄日志的接口
2. 判斷日志所處級別,并判斷是否要過濾
3. 根據(jù)其日志級別將該條日志分發(fā)給不同handler

常用函數(shù)有:
Logger.setLevel() 設(shè)置日志級別
Logger.addHandler() 和 Logger.removeHandler() 添加和刪除一個Handler
Logger.addFilter() 添加一個Filter,過濾作用
Logging.Handler:Handler基于日志級別對日志進行分發(fā),如設(shè)置為WARNING級別的Handler只會處理WARNING及以上級別的日志。

常用函數(shù)有:
setLevel() 設(shè)置級別
setFormatter() 設(shè)置Formatter

3、日志輸出-控制臺

import logging # 引入logging模塊
logging.basicConfig(level=logging.DEBUG,
          format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s') # logging.basicConfig函數(shù)對日志的輸出格式及方式做相關(guān)配置
# 由于日志基本配置中級別設(shè)置為DEBUG,所以一下打印信息將會全部顯示在控制臺上
logging.info('this is a loggging info message')
logging.debug('this is a loggging debug message')
logging.warning('this is loggging a warning message')
logging.error('this is an loggging error message')
logging.critical('this is a loggging critical message')

上面代碼通過logging.basicConfig函數(shù)進行配置了日志級別和日志內(nèi)容輸出格式;因為級別為DEBUG,所以會將DEBUG級別以上的信息都輸出顯示再控制臺上。

回顯:

4、日志輸出-文件

import logging # 引入logging模塊
import os.path
import time
# 第一步,創(chuàng)建一個logger
logger = logging.getLogger()
logger.setLevel(logging.INFO) # Log等級總開關(guān)
# 第二步,創(chuàng)建一個handler,用于寫入日志文件
rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
log_path = os.path.dirname(os.getcwd()) + '/Logs/'
log_name = log_path + rq + '.log'
logfile = log_name
fh = logging.FileHandler(logfile, mode='w')
fh.setLevel(logging.DEBUG) # 輸出到file的log等級的開關(guān)
# 第三步,定義handler的輸出格式
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
fh.setFormatter(formatter)
# 第四步,將logger添加到handler里面
logger.addHandler(fh)
# 日志
logger.debug('this is a logger debug message')
logger.info('this is a logger info message')
logger.warning('this is a logger warning message')
logger.error('this is a logger error message')
logger.critical('this is a logger critical message')

回顯(打開同一目錄下生成的文件):

5、日志輸出-控制臺和文件

只要在輸入到日志中的第二步和第三步插一個handler輸出到控制臺:

創(chuàng)建一個handler,用于輸出到控制臺

ch = logging.StreamHandler()
ch.setLevel(logging.WARNING) # 輸出到console的log等級的開關(guān)

第四步和第五步分別加入以下代碼即可

ch.setFormatter(formatter)
logger.addHandler(ch)

6、format常用格式說明

  • %(levelno)s: 打印日志級別的數(shù)值
  • %(levelname)s: 打印日志級別名稱
  • %(pathname)s: 打印當前執(zhí)行程序的路徑,其實就是sys.argv[0]
  • %(filename)s: 打印當前執(zhí)行程序名
  • %(funcName)s: 打印日志的當前函數(shù)
  • %(lineno)d: 打印日志的當前行號
  • %(asctime)s: 打印日志的時間
  • %(thread)d: 打印線程ID
  • %(threadName)s: 打印線程名稱
  • %(process)d: 打印進程ID
  • %(message)s: 打印日志信息

7、捕捉異常,用traceback記錄

import os.path
import time
import logging
# 創(chuàng)建一個logger
logger = logging.getLogger()
logger.setLevel(logging.INFO) # Log等級總開關(guān)

# 創(chuàng)建一個handler,用于寫入日志文件
rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
log_path = os.path.dirname(os.getcwd()) + '/Logs/'
log_name = log_path + rq + '.log'
logfile = log_name
fh = logging.FileHandler(logfile, mode='w')
fh.setLevel(logging.DEBUG) # 輸出到file的log等級的開關(guān)

# 定義handler的輸出格式
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
fh.setFormatter(formatter)
logger.addHandler(fh)
# 使用logger.XX來記錄錯誤,這里的"error"可以根據(jù)所需要的級別進行修改
try:
  open('/path/to/does/not/exist', 'rb')
except (SystemExit, KeyboardInterrupt):
  raise
except Exception, e:
  logger.error('Failed to open file', exc_info=True)

回顯(存儲在文件中):

如果需要將日志不上報錯誤,僅記錄,可以將exc_info=False,回顯如下:

8、多模塊調(diào)用logging,日志輸出順序

warning_output.py

import logging
def write_warning():
  logging.warning(u"記錄文件warning_output.py的日志")

error_output.py

import logging
def write_error():
  logging.error(u"記錄文件error_output.py的日志")

main.py

import logging
import warning_output
import error_output
def write_critical():
  logging.critical(u"記錄文件main.py的日志")


warning_output.write_warning() # 調(diào)用warning_output文件中write_warning方法
write_critical()
error_output.write_error() # 調(diào)用error_output文件中write_error方法

回顯:

從上面來看,日志的輸出順序和模塊執(zhí)行順序是一致的。

9、日志滾動和過期刪除(按時間)

# coding:utf-8
import logging
import time
import re
from logging.handlers import TimedRotatingFileHandler
from logging.handlers import RotatingFileHandler


def backroll():
  #日志打印格式
  log_fmt = '%(asctime)s\tFile \"%(filename)s\",line %(lineno)s\t%(levelname)s: %(message)s'
  formatter = logging.Formatter(log_fmt)
  #創(chuàng)建TimedRotatingFileHandler對象
  log_file_handler = TimedRotatingFileHandler(filename="ds_update", when="M", interval=2, backupCount=2)
  #log_file_handler.suffix = "%Y-%m-%d_%H-%M.log"
  #log_file_handler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}.log$")
  log_file_handler.setFormatter(formatter)
  logging.basicConfig(level=logging.INFO)
  log = logging.getLogger()
  log.addHandler(log_file_handler)
  #循環(huán)打印日志
  log_content = "test log"
  count = 0
  while count < 30:
    log.error(log_content)
    time.sleep(20)
    count = count + 1
  log.removeHandler(log_file_handler)


if __name__ == "__main__":
  backroll()

filename:日志文件名的prefix;

when:是一個字符串,用于描述滾動周期的基本單位,字符串的值及意義如下:
“S”: Seconds
“M”: Minutes
“H”: Hours
“D”: Days
“W”: Week day (0=Monday)
“midnight”: Roll over at midnight

interval: 滾動周期,單位有when指定,比如:when=’D’,interval=1,表示每天產(chǎn)生一個日志文件

backupCount: 表示日志文件的保留個數(shù)

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python利用Tiler制作專屬卡通頭像和LOGO

    Python利用Tiler制作專屬卡通頭像和LOGO

    Tiler是一種使用各種其他較小圖像平鋪創(chuàng)建新圖像的工具,它與其他馬賽克工具不同,因為它可以適應多種形狀、大小、方向的貼圖,稱為buil in build。本文就來利用Tiler制作專屬卡通頭像和LOGO,需要的可以參考一下
    2022-12-12
  • 基于python for in if 連著寫與分開寫的區(qū)別說明

    基于python for in if 連著寫與分開寫的區(qū)別說明

    這篇文章主要介紹了基于python for in if 連著寫與分開寫的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Pygame用200行代碼實現(xiàn)俄羅斯方塊

    Pygame用200行代碼實現(xiàn)俄羅斯方塊

    俄羅斯方塊的邏輯很簡單,就是幾個方塊組合在一起,然后下落,當其碰到四周的墻壁后便無法移動,若某行被方塊所填滿,那么就刪除這一行,然后此行上面的所有方塊下降一行,本文給大家介紹了用Pygame實現(xiàn)俄羅斯方塊,文中代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • Python 轉(zhuǎn)換RGB顏色值的示例代碼

    Python 轉(zhuǎn)換RGB顏色值的示例代碼

    這篇文章主要介紹了Python 轉(zhuǎn)換RGB顏色值的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • 利用Python為iOS10生成圖標和截屏

    利用Python為iOS10生成圖標和截屏

    這篇文章主要為大家詳細介紹了利用Python為iOS10生成圖標和截屏的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • python實現(xiàn)局域網(wǎng)內(nèi)實時通信代碼

    python實現(xiàn)局域網(wǎng)內(nèi)實時通信代碼

    今天小編就為大家分享一篇python實現(xiàn)局域網(wǎng)內(nèi)實時通信代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 基于Python開發(fā)PDF轉(zhuǎn)PNG的可視化工具

    基于Python開發(fā)PDF轉(zhuǎn)PNG的可視化工具

    在數(shù)字文檔處理領(lǐng)域,PDF到圖像格式的轉(zhuǎn)換是常見需求,本文介紹如何利用Python的PyMuPDF庫和Tkinter框架開發(fā)一個帶圖形界面的PDF轉(zhuǎn)PNG工具,需要的可以參考下
    2025-03-03
  • Python如何用字典完成匹配任務

    Python如何用字典完成匹配任務

    在生物信息學領(lǐng)域,經(jīng)常需要根據(jù)基因名稱匹配其對應的編號,本文介紹了一種通過字典進行基因名稱與編號匹配的方法,首先定義一個空列表存儲對應編號,對于字典中不存在的基因名稱,其編號默認為0
    2024-09-09
  • Python實現(xiàn)交通數(shù)據(jù)可視化的示例代碼

    Python實現(xiàn)交通數(shù)據(jù)可視化的示例代碼

    本文主要分享了Python交通數(shù)據(jù)分析與可視化的實戰(zhàn)!其中主要是使用TransBigData庫快速高效地處理、分析、挖掘出租車GPS數(shù)據(jù),感興趣的可以了解一下
    2023-04-04
  • python實現(xiàn)按任意鍵繼續(xù)執(zhí)行程序

    python實現(xiàn)按任意鍵繼續(xù)執(zhí)行程序

    本文給大家分享的是如何使用Python腳本實現(xiàn)按任意鍵繼續(xù)執(zhí)行程序的代碼,非常的簡單實用,有需要的小伙伴可以參考下
    2016-12-12

最新評論

曲阜市| 蛟河市| 安塞县| 元氏县| 锡林浩特市| 武强县| 石城县| 荔浦县| 桂平市| 白河县| 鄂尔多斯市| 江门市| 临洮县| 城口县| 丰县| 客服| 行唐县| 乐业县| 忻州市| 博乐市| 蓬溪县| 库尔勒市| 广河县| 牙克石市| 松潘县| 庆安县| 龙陵县| 平陆县| 虹口区| 深圳市| 布拖县| 龙胜| 赣榆县| 宜宾市| 惠水县| 高碑店市| 吴江市| 焦作市| 永城市| 雷山县| 大悟县|