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

Python Logging 日志記錄入門學(xué)習(xí)

 更新時(shí)間:2018年06月02日 16:29:16   作者:SolomonXie  
這篇文章主要介紹了Python Logging 日志記錄入門學(xué)習(xí),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧

Python Logging原來(lái)真的遠(yuǎn)比我想象的要復(fù)雜很多很多,學(xué)習(xí)路線堪比git。但是又繞不過去,alternatives又少,所以必須要予以重視,踏踏實(shí)實(shí)認(rèn)認(rèn)真真的來(lái)好好學(xué)學(xué)才行。

學(xué)習(xí)Logging的目的:

簡(jiǎn)單腳本還好,print足夠。

但是稍微復(fù)雜點(diǎn),哪怕是三四個(gè)文件加起來(lái)兩三百行代碼,調(diào)試也開始變復(fù)雜起來(lái)了。

再加上如果是后臺(tái)長(zhǎng)期運(yùn)行的那種腳本,運(yùn)行信息的調(diào)查更是復(fù)雜起來(lái)。

一開始我還在各種查crontab的日志查看,或者是python后臺(tái)運(yùn)行查看,或者是python stdout的獲取等等,全都找錯(cuò)了方向。

真正的解決方案在于正確的logging。

記錄好了的話,我不需要去找python的控制臺(tái)輸出stdout,也不需要找crontab的日志,只需要查看log文件即可。

下面是python的logging學(xué)習(xí)記錄。

最簡(jiǎn)單的日志輸出(無(wú)文件記錄)

import logging
 
logging.error("出現(xiàn)了錯(cuò)誤")
logging.info("打印信息")
logging.warning("警告信息")

首先,忘掉logging.info()! 忘掉logging.basicConfig()!

網(wǎng)上各種關(guān)于python logging的文章實(shí)在是太不體諒新手了,logging這么復(fù)雜的東西竟然想表現(xiàn)得很簡(jiǎn)單,還用各種簡(jiǎn)單的東西做假象。

實(shí)際上我們真正要用起來(lái)的日志,絕對(duì)是不會(huì)直接用logging.info()logging.basicConfig()這樣的,這是此模塊的官方推出來(lái)迷惑人的——看似讓你一鍵上手,快速看到結(jié)果,但是跟實(shí)際真的不搭!

所以為了后面解釋起來(lái)輕松,必須先警告這點(diǎn):忘記它們倆!

記住,唯一要用到logging.什么的,就只有logging.getLogger()這一次。

了解logging的工作流

不想上流程圖一類的東西,那樣反而更迷糊。

簡(jiǎn)單說(shuō)吧:

logging模塊是會(huì)自動(dòng)將你自定制的logger對(duì)象全局化的,

也就是說(shuō),你在自己的模塊里只要定義了一次某個(gè)logger,比如叫l(wèi)og,那么只要是在同一個(gè)模塊中運(yùn)行的其他文件都能讀取到它。

比如說(shuō),你在主文件main.py中自定義了一個(gè)logger,可能設(shè)置了什么輸出文件、輸出格式什么的,然后你在main.py中會(huì)引用一些別的文件或模塊,比如sub.py,那么在這個(gè)sub.py中你什么都不用設(shè)置,只要用一句logger = logging.getLogger('之前在main.py定義的日志名')即可獲得之前的一切自定義設(shè)置。

當(dāng)然,被調(diào)用的文件(先稱為子模塊)中,用logging.getLogger('日志名')時(shí),最好在日志名后加一個(gè).子名稱這樣的,比如main.sub。這樣輸出的時(shí)候就會(huì)顯示出來(lái)某條日志記錄是來(lái)自于這個(gè)文件里了。當(dāng)然,.前面的父級(jí)logger必須名字一致,是會(huì)被識(shí)別出來(lái)的!

然后,子日志還可以再子日志,甚至一個(gè)子模塊可以再讓所有函數(shù)各又一個(gè)子子日志,比如main.sub.func1這樣的。logging都會(huì)根據(jù).識(shí)別出來(lái)上下級(jí)關(guān)系的。

這樣一說(shuō),實(shí)際上也就是class類繼承的那種機(jī)制了。你按照父級(jí)名稱繼承,然后還可以改寫自己的新設(shè)置等。

了解了這些概念以后,才能來(lái)談代碼。實(shí)際上也就好理解多了。

設(shè)置logger的方法

看來(lái)看去,這篇文章說(shuō)得比較全面也最清楚,以下很多都參考到它的內(nèi)容:Python 101: An Intro to logging

一般想要自定義一個(gè)logger,比如讓它輸出信息時(shí)按照什么格式顯示,輸出到哪個(gè)文件,要不要輸出到屏幕一類,有三種方法可以達(dá)到設(shè)置:

  1. 直接在python代碼里設(shè)置
  2. 用外部的config.ini文件配置
  3. 用python的dict字典配置

三種達(dá)到的目的都是一樣的,字典用的人很少也不方便,配置文件比較好用只是.ini的語(yǔ)法不是很方便讀,且不容易做到變量的動(dòng)態(tài)設(shè)置,所以一般直接在python代碼里寫就好。

常用設(shè)置語(yǔ)句

以下是程序主入口文件的通用寫法,注意,一定要在主入口定義好logger,這樣其他所有的子模塊才能夠繼承到。

#  main.py
import logging
import otherMod2  # 等下會(huì)調(diào)用到的子模塊

def main():
  """
  這個(gè)文件是程序的主入口
  """

  define_logger()

  log = logging.getLogger('exampleApp')

  # 輸出信息測(cè)試
  logger.info("Program started")
  result = otherMod2.add(7, 8)   # 這個(gè)是來(lái)自別的模塊的方法
  logger.info("Done!")

def define_logger():
  logger = logging.getLogger("exampleApp")
  logger.setLevel(logging.INFO)

  # 設(shè)置輸出格式
  formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
 
  # 設(shè)置日志文件處理器
  fh = logging.FileHandler("new_snake.log")
  fh.setFormatter(formatter)  # 為這個(gè)處理器添加格式

  # 設(shè)置屏幕stdout輸出處理器
  sh = logging.StreamHandler(stream=None)
  sh.setFormatter(formatter)
 
  # 把處理器加到logger上
  logger.addHandler(fh)
  logger.addHandler(sh)
 
if __name__ == "__main__":
  main()

下面是子模塊中的調(diào)用方法(很簡(jiǎn)單):

# otherMod2.py
import logging
 
module_logger = logging.getLogger("exampleApp.otherMod2")

def add(x, y):
  # 這里一句`getLogger`就繼承到父級(jí)的logger了
  logger = logging.getLogger("exampleApp.otherMod2.add")

  # 輸出測(cè)試
  logger.info("added %s and %s to get %s" % (x, y, x+y))
  return x+y

注意,主文件中,在什么地方定義logger都可以,可以在main()里也可以在任何單獨(dú)的函數(shù)或類里,無(wú)所謂。只要在調(diào)用子模塊之前定義好了就可以了。一旦定義過,日志名就會(huì)被記下來(lái),然后子模塊就可以輕松繼承到。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python使用Plotly繪圖工具繪制氣泡圖

    python使用Plotly繪圖工具繪制氣泡圖

    這篇文章主要為大家詳細(xì)介紹了python使用Plotly繪圖工具繪制氣泡圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • python打包生成的exe文件運(yùn)行時(shí)提示缺少模塊的解決方法

    python打包生成的exe文件運(yùn)行時(shí)提示缺少模塊的解決方法

    今天小編就為大家分享一篇python打包生成的exe文件運(yùn)行時(shí)提示缺少模塊的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-10-10
  • python寫入csv時(shí)writerow()和writerows()函數(shù)簡(jiǎn)單示例

    python寫入csv時(shí)writerow()和writerows()函數(shù)簡(jiǎn)單示例

    這篇文章主要給大家介紹了關(guān)于python寫入csv時(shí)writerow()和writerows()函數(shù)的相關(guān)資料,writerows和writerow是Python中csv模塊中的兩個(gè)函數(shù),用于將數(shù)據(jù)寫入CSV文件,需要的朋友可以參考下
    2023-07-07
  • PyQt5實(shí)現(xiàn)無(wú)邊框窗口的標(biāo)題拖動(dòng)和窗口縮放

    PyQt5實(shí)現(xiàn)無(wú)邊框窗口的標(biāo)題拖動(dòng)和窗口縮放

    這篇文章主要為大家詳細(xì)介紹了PyQt5實(shí)現(xiàn)無(wú)邊框窗口的標(biāo)題拖動(dòng)和窗口縮放,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python人工智能實(shí)戰(zhàn)之對(duì)話機(jī)器人的實(shí)現(xiàn)

    Python人工智能實(shí)戰(zhàn)之對(duì)話機(jī)器人的實(shí)現(xiàn)

    本文將通過Python開發(fā)一個(gè)可以講笑話的機(jī)器人,可以自由定制功能,想講幾個(gè)笑話就講幾個(gè)笑話。文中的示例代碼講解詳細(xì),感興趣的可以動(dòng)手試一試
    2022-02-02
  • 詳解python使用turtle庫(kù)來(lái)畫一朵花

    詳解python使用turtle庫(kù)來(lái)畫一朵花

    這篇文章主要介紹了python使用turtle庫(kù)來(lái)畫一朵花,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • python-地圖可視化組件folium的操作

    python-地圖可視化組件folium的操作

    這篇文章主要介紹了python-地圖可視化組件folium的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2020-12-12
  • python操作xml文件詳細(xì)介紹

    python操作xml文件詳細(xì)介紹

    這篇文章主要介紹了python操作xml文件詳細(xì)介紹,著重介紹了獲取XML標(biāo)簽的屬性和值的方法,需要的朋友可以參考下
    2014-06-06
  • Python OpenCV圖像的位運(yùn)算操作

    Python OpenCV圖像的位運(yùn)算操作

    位運(yùn)算是計(jì)算機(jī)科學(xué)中一種基礎(chǔ)而高效的操作,它直接對(duì)二進(jìn)制位進(jìn)行處理,在圖像處理中,位運(yùn)算也是一種重要的技術(shù),尤其在圖像的合成、分離、掩模處理等場(chǎng)景中,常常用到位運(yùn)算,本文將介紹圖像處理中的常見位運(yùn)算操作,需要的朋友可以參考下
    2024-12-12
  • 如何安裝2019Pycharm最新版本(詳細(xì)教程)

    如何安裝2019Pycharm最新版本(詳細(xì)教程)

    這篇文章主要介紹了如何安裝2019Pycharm最新版本(詳細(xì)教程),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評(píng)論

镇康县| 台南县| 敦化市| 镇巴县| 大安市| 南安市| 普陀区| 肇东市| 西乌| 洞头县| 五常市| 定襄县| 离岛区| 陈巴尔虎旗| 社旗县| 樟树市| 天水市| 青神县| 武邑县| 乌兰县| 昆山市| 浦县| 阿荣旗| 布拖县| 仙居县| 南皮县| 米泉市| 武冈市| 海原县| 漾濞| 辉县市| 靖州| 明水县| 太康县| 库尔勒市| 东台市| 岑溪市| 婺源县| 安徽省| 肃宁县| 达日县|