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

python3中超級(jí)好用的日志模塊-loguru模塊使用詳解

 更新時(shí)間:2022年11月23日 15:32:30   作者:cui_yonghua  
loguru默認(rèn)的輸出格式是上面的內(nèi)容,有時(shí)間、級(jí)別、模塊名、行號(hào)以及日志信息,不需要手動(dòng)創(chuàng)建?logger,直接使用即可,另外其輸出還是彩色的,看起來會(huì)更加友好,這篇文章主要介紹了python3中超級(jí)好用的日志模塊-loguru模塊使用詳解,需要的朋友可以參考下

一. 使用logging模塊時(shí)

用python寫代碼時(shí),logging模塊最基本的幾行配置,如下:

import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

logger.info('this is another debug message')
logger.warning('this is another debug message')
logger.error('this is another debug message')
logger.info('this is another debug message')

執(zhí)行結(jié)果如下:

二. loguru模塊的基礎(chǔ)使用

如果想更簡潔,可用loguru庫,python3安裝:pip3 install loguru。

loguru默認(rèn)的輸出格式是上面的內(nèi)容,有時(shí)間、級(jí)別、模塊名、行號(hào)以及日志信息,不需要手動(dòng)創(chuàng)建 logger,直接使用即可,另外其輸出還是彩色的,看起來會(huì)更加友好。

用法如下:

from loguru import logger

logger.debug('this is a debug message')
logger.info('this is another debug message')
logger.warning('this is another debug message')
logger.error('this is another debug message')
logger.info('this is another debug message')
logger.success('this is success message!')
logger.critical('this is critical message!')

執(zhí)行結(jié)果如下:

不需要配置什么東西,直接引入一個(gè) logger,然后調(diào)用其 debug 方法即可。

如果想要輸出到文件,只需要:

from loguru import logger

logger.add('my_log.log')
logger.debug('this is a debug')

運(yùn)行之后會(huì)發(fā)現(xiàn)目錄下 my_log.log 出現(xiàn)了剛剛控制臺(tái)輸出的 DEBUG 信息。上面只是基礎(chǔ)用法,更詳細(xì)的在下面

三. logurr詳細(xì)使用

比如支持輸出到多個(gè)文件,分級(jí)別分別輸出,過大創(chuàng)建新文件,過久自動(dòng)刪除等等。

3.1 add 方法的定義

def add(
        self,
        sink,
        *,
        level=_defaults.LOGURU_LEVEL,
        format=_defaults.LOGURU_FORMAT,
        filter=_defaults.LOGURU_FILTER,
        colorize=_defaults.LOGURU_COLORIZE,
        serialize=_defaults.LOGURU_SERIALIZE,
        backtrace=_defaults.LOGURU_BACKTRACE,
        diagnose=_defaults.LOGURU_DIAGNOSE,
        enqueue=_defaults.LOGURU_ENQUEUE,
        catch=_defaults.LOGURU_CATCH,
        **kwargs
    ):
    pass

看看它的源代碼,它支持這么多的參數(shù),如 level、format、filter、color 等等,另外我們還注意到它有個(gè)非常重要的參數(shù) sink,我們看看官方文檔:,可以了解到通過 sink 我們可以傳入多種不同的數(shù)據(jù)結(jié)構(gòu),匯總?cè)缦拢?/p>

  • sink 可以傳入一個(gè) file 對象,例如 sys.stderr 或者 open(‘file.log’, ‘w’) 都可以。
  • sink 可以直接傳入一個(gè) str 字符串或者 pathlib.Path 對象,其實(shí)就是代表文件路徑的,如果識(shí)別到是這種類型,它會(huì)自動(dòng)創(chuàng)建對應(yīng)路徑的日志文件并將日志輸出進(jìn)去。
  • sink 可以是一個(gè)方法,可以自行定義輸出實(shí)現(xiàn)。
  • sink 可以是一個(gè) logging 模塊的 Handler,比如 FileHandler、StreamHandler 等等。
  • sink 還可以是一個(gè)自定義的類,具體的實(shí)現(xiàn)規(guī)范可以參見官方文檔https://loguru.readthedocs.io/en/stable/api/logger.html#sink

所以說,剛才我們所演示的輸出到文件,僅僅給它傳了一個(gè) str 字符串路徑,他就給我們創(chuàng)建了一個(gè)日志文件,就是這個(gè)原理。

3.2 基本參數(shù)

下面我們再了解下它的其他參數(shù),例如 format、filter、level 等等。

其實(shí)它們的概念和格式和 logging 模塊都是基本一樣的了,例如這里使用 format、filter、level 來規(guī)定輸出的格式:

logger.add('runtime.log', format="{time} {level} {message}", filter="my_module", level="INFO")

3.3 刪除 sink

另外添加 sink 之后我們也可以對其進(jìn)行刪除,相當(dāng)于重新刷新并寫入新的內(nèi)容。

刪除的時(shí)候根據(jù)剛剛 add 方法返回的 id 進(jìn)行刪除即可,看下面的例子:

from loguru import logger

trace = logger.add('my_log.log')
logger.debug('this is a debug message')
logger.remove(trace)
logger.debug('this is another debug message')

看這里,我們首先 add 了一個(gè) sink,然后獲取它的返回值,賦值為 trace。隨后輸出了一條日志,然后將 trace 變量傳給 remove 方法,再次輸出一條日志,看看結(jié)果是怎樣的。

控制臺(tái)輸出如下:

日志文件 my_log.log 內(nèi)容如下:

可以發(fā)現(xiàn),在調(diào)用 remove 方法之后,確實(shí)將歷史 log 刪除了。但實(shí)際上這并不是刪除,只不過是將 sink 對象移除之后,在這之前的內(nèi)容不會(huì)再輸出到日志中。

這樣我們就可以實(shí)現(xiàn)日志的刷新重新寫入操作。

3.4 rotation 配置

用了 loguru 我們還可以非常方便地使用 rotation 配置,比如我們想一天輸出一個(gè)日志文件,或者文件太大了自動(dòng)分隔日志文件,我們可以直接使用 add 方法的 rotation 參數(shù)進(jìn)行配置。

我們看看下面的例子:

logger.add('runtime_{time}.log', rotation="500 MB")

通過這樣的配置我們就可以實(shí)現(xiàn)每 500MB 存儲(chǔ)一個(gè)文件,每個(gè) log 文件過大就會(huì)新創(chuàng)建一個(gè) log 文件。我們在配置 log 名字時(shí)加上了一個(gè) time 占位符,這樣在生成時(shí)可以自動(dòng)將時(shí)間替換進(jìn)去,生成一個(gè)文件名包含時(shí)間的 log 文件。

另外我們也可以使用 rotation 參數(shù)實(shí)現(xiàn)定時(shí)創(chuàng)建 log 文件,例如:

logger.add('runtime_{time}.log', rotation='00:00')

這樣就可以實(shí)現(xiàn)每天 0 點(diǎn)新創(chuàng)建一個(gè) log 文件輸出了。

另外我們也可以配置 log 文件的循環(huán)時(shí)間,比如每隔一周創(chuàng)建一個(gè) log 文件,寫法如下:

logger.add('runtime_{time}.log', rotation='1 week')

這樣我們就可以實(shí)現(xiàn)一周創(chuàng)建一個(gè) log 文件了。

3.5 retention 配置

很多情況下,一些非常久遠(yuǎn)的 log 對我們來說并沒有什么用處了,它白白占據(jù)了一些存儲(chǔ)空間,不清除掉就會(huì)非常浪費(fèi)。retention 這個(gè)參數(shù)可以配置日志的最長保留時(shí)間。

比如我們想要設(shè)置日志文件最長保留 10 天,可以這么來配置:

logger.add('runtime.log', retention='10 days')

這樣 log 文件里面就會(huì)保留最新 10 天的 log,媽媽再也不用擔(dān)心 log 沉積的問題啦。

3.6 compression 配置

loguru 還可以配置文件的壓縮格式,比如使用 zip 文件格式保存,示例如下:

logger.add('runtime.log', compression='zip')

這樣可以更加節(jié)省存儲(chǔ)空間。

3.7 字符串格式化

loguru 在輸出 log 的時(shí)候還提供了非常友好的字符串格式化功能,像這樣:

logger.info('If you are using Python {}, prefer {feature} of course!', 3.6, feature='f-strings')

這樣在添加參數(shù)就非常方便了。

3.8 Traceback 記錄

在很多情況下,如果遇到運(yùn)行錯(cuò)誤,而我們在打印輸出 log 的時(shí)候萬一不小心沒有配置好 Traceback 的輸出,很有可能我們就沒法追蹤錯(cuò)誤所在了。

但用了 loguru 之后,我們用它提供的裝飾器就可以直接進(jìn)行 Traceback 的記錄,類似這樣的配置即可:

@logger.catch
def my_function(x, y, z):
    # An error? It's caught anyway!
    return 1 / (x + y + z)

我們做個(gè)測試,我們在調(diào)用時(shí)三個(gè)參數(shù)都傳入 0,直接引發(fā)除以 0 的錯(cuò)誤,看看會(huì)出現(xiàn)什么情況:

my_function(0, 0, 0)

運(yùn)行完畢之后,可以發(fā)現(xiàn) log 里面就出現(xiàn)了 Traceback 信息,而且給我們輸出了當(dāng)時(shí)的變量值,真的是不能再贊了!結(jié)果如下:

> File "run.py", line 15, in <module>
    my_function(0, 0, 0)
    └ <function my_function at 0x1171dd510>

  File "/private/var/py/logurutest/demo5.py", line 13, in my_function
    return 1 / (x + y + z)
                │   │   └ 0
                │   └ 0
                └ 0

ZeroDivisionError: division by zero

因此,用 loguru 可以非常方便地實(shí)現(xiàn)日志追蹤,debug 效率可能要高上十倍了?

另外 loguru 還有很多很多強(qiáng)大的功能,這里就不再一一展開講解了,更多的內(nèi)容大家可以看看 loguru 的官方文檔詳細(xì)了解一下:https://loguru.readthedocs.io/en/stable/index.html

看完之后,是時(shí)候把自己的 logging 模塊替換成 loguru 啦!

到此這篇關(guān)于python3中超級(jí)好用的日志模塊-loguru模塊使用詳解的文章就介紹到這了,更多相關(guān)python日志模塊loguru模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python棧算法的實(shí)現(xiàn)與簡單應(yīng)用示例

    Python棧算法的實(shí)現(xiàn)與簡單應(yīng)用示例

    這篇文章主要介紹了Python棧算法的實(shí)現(xiàn)與簡單應(yīng)用,簡單講述了棧的原理并結(jié)合實(shí)例形式給出了基于棧實(shí)現(xiàn)的進(jìn)制轉(zhuǎn)換與括號(hào)匹配等相關(guān)使用技巧,需要的朋友可以參考下
    2017-11-11
  • 一文了解Python3的錯(cuò)誤和異常

    一文了解Python3的錯(cuò)誤和異常

    Python 的語法錯(cuò)誤或者稱之為解析錯(cuò),是初學(xué)者經(jīng)常碰到的。即便 Python 程序的語法是正確的,在運(yùn)行它的時(shí)候,也有可能發(fā)生錯(cuò)誤。運(yùn)行期檢測到的錯(cuò)誤被稱為異常。本文就來和大家聊聊Python3的錯(cuò)誤和異常,感興趣的可以學(xué)習(xí)一下
    2022-09-09
  • Python變量作用范圍實(shí)例分析

    Python變量作用范圍實(shí)例分析

    這篇文章主要介紹了Python變量作用范圍,實(shí)例分析了Python中變量的定義與相關(guān)作用域,是Python學(xué)習(xí)中非常重要的基本技巧,需要的朋友可以參考下
    2015-07-07
  • 利用Python找回微信撤回信息

    利用Python找回微信撤回信息

    一條撤回的微信消息,就像一個(gè)秘密,讓你迫切地想去一探究竟。這篇文章就將為大家介紹如何用Python找回撤回的微信信息,感興趣的可以試一試
    2022-01-01
  • Pytorch torch.repeat_interleave()用法示例詳解

    Pytorch torch.repeat_interleave()用法示例詳解

    torch.repeat_interleave() 是 PyTorch 中的一個(gè)函數(shù),用于按指定的方式重復(fù)張量中的元素,這篇文章主要介紹了Pytorch torch.repeat_interleave()用法示例詳解,需要的朋友可以參考下
    2024-01-01
  • Python數(shù)據(jù)可視化JupyterNotebook繪圖生成高清圖片

    Python數(shù)據(jù)可視化JupyterNotebook繪圖生成高清圖片

    這篇文章主要為大家介紹了Python數(shù)據(jù)可視化中如何利用Jupyter Notebook繪圖生成高清圖片,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • Java與Python兩大幸存者誰更勝一籌呢

    Java與Python兩大幸存者誰更勝一籌呢

    Python起源于一種腳本語言,它的語法體現(xiàn)了一種可讀性的理念,具有簡單而規(guī)則的界限,鼓勵(lì)簡潔和一致的代碼布局,而Java是一種面向?qū)ο笳Z言,其吸引力和價(jià)值所在是其具有的可移植性和相對效率。下面通過本文了解下java python 誰更勝一籌
    2018-04-04
  • Python?list?append方法之給列表追加元素

    Python?list?append方法之給列表追加元素

    這篇文章主要介紹了Python?list?append方法如何給列表追加元素,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python 使用xlwt模塊將多行多列數(shù)據(jù)循環(huán)寫入excel文檔的操作

    Python 使用xlwt模塊將多行多列數(shù)據(jù)循環(huán)寫入excel文檔的操作

    這篇文章主要介紹了Python 使用xlwt模塊將多行多列數(shù)據(jù)循環(huán)寫入excel文檔的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Python中文字符串截取問題

    Python中文字符串截取問題

    web應(yīng)用難免會(huì)截取字符串的需求,Python中截取英文很容易,但是截取utf-8的中文機(jī)會(huì)截取一半導(dǎo)致一些不是亂碼的亂碼.其實(shí)utf8截取很簡單,這里記下來分享給大家
    2015-06-06

最新評(píng)論

浠水县| 遵义市| 青田县| 水城县| 重庆市| 行唐县| 崇礼县| 资兴市| 高平市| 防城港市| 嘉祥县| 永丰县| 花垣县| 永清县| 太原市| 苗栗市| 宣武区| 洛隆县| 旬阳县| 贺兰县| 洛浦县| 鹿邑县| 抚顺县| 大名县| 建瓯市| 长子县| 邵东县| 青阳县| 嘉黎县| 瑞昌市| 富宁县| 政和县| 阳江市| 溧水县| 光泽县| 万盛区| 大渡口区| 体育| 方山县| 襄汾县| 科技|