国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python logging 模塊簡介

Pandaaa / 2032人閱讀

摘要:模塊簡介的模塊提供了靈活的日志處理相關(guān)功能可以用來追蹤程序運行的情況。模塊設(shè)置的默認(rèn)等級時這意味著默認(rèn)情況下,日志級別為的日志會被記錄,而的日志會被忽略。線程安全模塊是通過線程鎖保證線程安全的。

Logging 模塊 簡介

Python的 logging 模塊提供了靈活的日志處理相關(guān)功能, 可以用來追蹤程序運行的情況。

logging 模塊提供了一系列標(biāo)準(zhǔn)的日志等級: DEBUG, INFO, WARNING, ERROR, CRITICAL, 顧名思義可以大致看出它們各自的使用情況。 logging 模塊設(shè)置的默認(rèn)等級時 WARNING, 這意味著默認(rèn)情況下,日志級別為 WARNING, ERROR, CRITICAL 的日志會被記錄,而 DEBUG, INFO 的日志會被忽略。

不同等級的value值如下,只有當(dāng)value大于 logger 的值才會記錄日志。

Level    Value
CRITICAL 50
ERROR    40
WARNING  30
INFO     20
DEBUG    10
UNSET     0
簡單輸出日志

下面看一個簡單的官方文檔上的例子:

import logging
logging.warning("Watch out!")  # will print a message to the console
logging.info("I told you so")  # will not print anything

輸出如下:

WARNING:root:Watch out!

可以看到info記錄的信息沒有輸出,這是因為默認(rèn)輸出級別不低于WARNING級別的。

輸入日志到文件

logging 支持輸出日志到文件,參考下面示例:

import logging
logging.basicConfig(filename="example.log",level=logging.DEBUG)
logging.debug("This message should go to the log file")
logging.info("So should this")
logging.warning("And this, too")

其中l(wèi)evel是指的記錄等級, 輸出如下:

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
幾個基本概念 loggers

logger是logging模塊提供的日志類 Logger 的實例,它暴露出接口可以直接供程序調(diào)用。
每個實例都有一個名字,并且示例間有類之間那種繼承關(guān)系,根據(jù)logger的名字來區(qū)分,比如叫"scan"的logger是叫"scan.text"和"scan.html"的父類(沒錯,他們是以點號錯分隔符)。

所有l(wèi)ogger共同的父類是 root , 就是上面示例中的中間那個默認(rèn)的root。 basicConfig 默認(rèn)的輸出格式為: severity:logger name:message 。

logger的通過 logging.getLogger(name) 來創(chuàng)建,有種在包里命名的慣用做法是:

logger = logging.getLogger(__name__)

這樣的好處是可以從logger的名字清楚的看到記錄的來源。

handlers 和輪轉(zhuǎn)日志

handlers 承擔(dān) logging 模塊里負(fù)責(zé)處理合適的信息到不同的地方的角色,下面通過設(shè)置一個RotatingFileHandler來展示handler的特性。

有時候需要創(chuàng)建多個輪轉(zhuǎn)日志,每個日志保存一定長度的內(nèi)容,最多保留一定數(shù)量的日志,其余的丟棄,這種情況下,可以定義 RotatingFileHandler 來實現(xiàn):

logging_rotatingfile_example.py
import glob
import logging
import logging.handlers

LOG_FILENAME = "logging_rotatingfile_example.out"

# Set up a specific logger with our desired output level
my_logger = logging.getLogger("MyLogger")
my_logger.setLevel(logging.DEBUG)

# Add the log message handler to the logger
handler = logging.handlers.RotatingFileHandler(
    LOG_FILENAME,
    maxBytes=20,
    backupCount=5,
)
my_logger.addHandler(handler)

# Log some messages
for i in range(20):
    my_logger.debug("i = %d" % i)

# See what files are created
logfiles = glob.glob("%s*" % LOG_FILENAME)
for filename in logfiles:
    print(filename)

運行輸出如下:

logging_rotatingfile_example.out
logging_rotatingfile_example.out.1
logging_rotatingfile_example.out.2
logging_rotatingfile_example.out.3
logging_rotatingfile_example.out.4
logging_rotatingfile_example.out.5

當(dāng)日志內(nèi)容達(dá)到定義的 maxBytes 時,會自動重命名文件后加上后綴".1",如果已經(jīng)存在后續(xù)的".1",".2"等則自動重命名他們向后加1,最后最多只保留 backupCount 定義數(shù)量的日志文件。

其它有用的handler參見這里。

Formatters 和 個性化輸出

Formatters 可以用來控制日志輸出的格式,參考下面的示例:

import logging

# create logger
logger = logging.getLogger("simple_example")
logger.setLevel(logging.DEBUG)

# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)

# create formatter
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")

# add formatter to ch
ch.setFormatter(formatter)

# add ch to logger
logger.addHandler(ch)

# "application" code
logger.debug("debug message")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
logger.critical("critical message")

輸出如下:

2016-11-27 23:18:51,128 - simple_example - DEBUG - debug message
2016-11-27 23:18:51,128 - simple_example - INFO - info message
2016-11-27 23:18:51,128 - simple_example - WARNING - warn message
2016-11-27 23:18:51,128 - simple_example - ERROR - error message
2016-11-27 23:18:51,128 - simple_example - CRITICAL - critical message

可以看到 %(asctime)s - %(name)s - %(levelname)s - %(message)s 這里對格式化輸出的影響。
其中默認(rèn)的日期時間顯示的格式是ISO8601格式, 也可以自定義時間格式,如下面的例子:

import logging
logging.basicConfig(format="%(asctime)s %(message)s", datefmt="%m/%d/%Y %I:%M:%S %p")
logging.warning("is when this event was logged.")

輸出:

python test12.py
11/27/2016 11:22:41 PM is when this event was logged.

好有個比較有用的格式化參數(shù)時 %(lineno)d, 顯示logger調(diào)用的時候所處的行數(shù)。具體的格式和作用可以參見這里。

其它 logger.exception

ERROR 的等級記錄日志,但和 DEBUG 等級一樣會輸出詳細(xì)的錯誤信息,通常用在exception處理中

Filter Object

Filters 是可以被handlers和loggers用來過濾日志的輸出的,因為用的不多,具體可參見文檔。

線程安全

logging模塊是通過線程鎖保證線程安全的。

Logging Flow

官方文檔上看到的logging流程圖,可以幫助理解日志記錄流程,參見這里。

從配置文件獲取logging的配置

參見這里。

參考資料

https://docs.python.org/2.7/h...

https://pymotw.com/3/logging/...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/44305.html

相關(guān)文章

  • Python Tips

    摘要:的三種數(shù)據(jù)類型字典列表元組,分別用花括號中括號小括號表示。約等于上句,可能是因為自定義變量名與內(nèi)部函數(shù)或變量同名了。下,默認(rèn)路徑一般為。的日志模塊中計時器定時器計劃任務(wù),。對象的問題怎樣忽略警告不打印煩人的警告打印到終端同時記錄到文件。 Python Enhancement Proposal。(PEP,Python增強(qiáng)建議書) Python之禪(import this) Pytho...

    Reducto 評論0 收藏0
  • Python標(biāo)準(zhǔn)庫---0、簡介

    摘要:下一篇文章標(biāo)準(zhǔn)庫內(nèi)置函數(shù)標(biāo)準(zhǔn)庫語言參考描述了語言的具體語法和語義,這份庫參考則介紹了與一同發(fā)行的標(biāo)準(zhǔn)庫。這個庫也包含了內(nèi)置函數(shù)和異常不需要語句就可以在所有代碼中使用的對象。下一篇文章標(biāo)準(zhǔn)庫內(nèi)置函數(shù) 下一篇文章:Python標(biāo)準(zhǔn)庫---1、內(nèi)置函數(shù) Python 標(biāo)準(zhǔn)庫 Python 語言參考 描述了 Python 語言的具體語法和語義,這份庫參考則介紹了與 Python 一同發(fā)行的標(biāo)...

    mo0n1andin 評論0 收藏0
  • 學(xué)習(xí) python logging(1): 基本用法

    摘要:簡介日志在編程中是十分重要,可以幫助我們跟蹤事件應(yīng)用的運行情況查問題統(tǒng)計數(shù)據(jù)等。在記錄日志時,通常表示某件事情的發(fā)生。基本使用直接打印運行之后看到的是因為默認(rèn)等級是所以是不會顯示的。 簡介 日志在編程中是十分重要,可以幫助我們跟蹤事件、應(yīng)用的運行情況、查問題、統(tǒng)計數(shù)據(jù)等。在記錄日志時,通常表示某件事情的發(fā)生。 python 中 logging 模塊提供記錄的基礎(chǔ)方法: debug, i...

    Donne 評論0 收藏0
  • Python 函數(shù)式編程、裝飾器以及一些相關(guān)概念簡介

    摘要:重寫內(nèi)建名字空間中的函數(shù)閉包閉包是詞法閉包的簡稱。另一種說法認(rèn)為閉包是由函數(shù)和與其相關(guān)的引用環(huán)境組合而成的實體。 Python 中的 Decorator(裝飾器) 是對一個函數(shù)或者方法的封裝,從而使其可以完成一些與自身功能無關(guān)的工作。 預(yù)備知識 一切皆對象 在 Python 中,所有的一切都被視為對象,任何的變量、函數(shù)、類等都是 object 的子類。因此除了變量之外,函數(shù)和類等也可以...

    Jinkey 評論0 收藏0
  • Python CSV模塊簡介

    摘要:文件格式是一種通用的電子表格和數(shù)據(jù)庫導(dǎo)入導(dǎo)出格式。這意味著讀的時候都認(rèn)為內(nèi)容是不被默認(rèn)引用符包圍的。所以非字符串類型的數(shù)據(jù)會被成字符串存儲。使用示例讀寫其它模塊還涉及了其它的概念,比如還提供了供錯誤處理的等,因為實際使用較少及就不累贅在此。 CSV csv文件格式是一種通用的電子表格和數(shù)據(jù)庫導(dǎo)入導(dǎo)出格式。最近我調(diào)用RPC處理服務(wù)器數(shù)據(jù)時,經(jīng)常需要將數(shù)據(jù)做個存檔便使用了這一方便的格式。...

    不知名網(wǎng)友 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<