python日誌配置文件的例子(python的日誌模塊)

本文目錄一覽:

python logging.conf是什麼類型文件

下面的函數用於配置logging模塊,它們位於logging.config模塊中。你可以使用這些函數來配置,也可以在logging或是logging.handlers中聲明它們來配置。

logging.config.dictConfig(config)

從dictionary中獲取logging配置

logging.config.fileConfig(fname, defaults=None, disable_existing_loggers=True)

從指定的fname的配置文件中讀取logging配置文件

該函數可以在應用程序中多次調用

logging.config.listen(port=DEFAULT_LOGGING_CONFIG_PORT)

在指定端口啟動socket server並偵聽新配置

logging.config.stopListening()

關閉先前正在偵聽的server

Configuration file format

被fileConfiguration()所理解的配置文件格式基於configparser功能。配置文件必須包含[loggers], [handlers]和[formatters],它們分別代表日誌文件中定義的每種類型的實體。對這3種實體,後面有一個單獨的section來定義該實體如何配置。

因此,[loggers]節中名為log01的logger,相關的配置文件細節在[logger_log01]節中定義。類似地,[handlers]節中名為

hand01的handler將在[handler_hand01]節中聲明,[formatters]節中的form01將在[formatter_form01]聲明。root logger配置必須在[logger_root]節聲明。

注意:fileConfig() API比dictConfig()舊,並不包含logging某些方面的功能。建議以後盡量使用dictConfig API。

配置文件的例子如下:

[loggers]

keys=root,log02,log03,log04,log05,log06,log07

[handlers]

keys=hand01,hand02,hand03,hand04,hand05,hand06,hand07,hand08,hand09

[formatters]

keys=form01,form02,form03,form04,form05,form06,form07,form08,form09

root logger必須指定一個級別和handlers列表。示例如下:

[logger_root]

level=NOTSET

handlers=hand01

其中level可以是DEBUG, INFO, WARNING, ERROR, CRITICAL or NOTSET之一,僅對root logger來說,NOTSET意味着所有的log message

都會記錄。對非root的logger,強制要求一些額外信息,比如

[logger_parser]

level=DEBUG

handlers=hand01

propagate=1

qualname=compiler.parser

當一個非root的logger中level被配置為NOSET,它將通過上一級的logger來確定當前logger的有效級別。propagete為1表示message必須傳播到上一級logger中,為0表示不傳。qualname表示該logger的層級channel名稱,這就是說,應用程序使用該名稱可以得到該logger對象。

handler類型很多,主要有StreamHandler,FileHandler,NullHandler,SysLogHandler,HTTPHandler等

handler節對應的配置示例如下:

[handler_hand01]

class=StreamHandler

level=NOTSET

formatter=form01

args=(sys.stdout,)

class表示該handler在logging包命名空間中的類名,level表示logger的級別,NONSET表示要記錄所有日誌。

formatter表示該handler的formatter的鍵名,假如空白的話,就使用默認值logging._defaultFormatter。假如formatter指定了該名字,必須在對應的section聲明。args字段是handler類的構造函數的變量列表,參考相關handler構造函數,或者下面的例子,去觀察通常的元素是如何構造的。比如:

[handler_hand02]

class=FileHandler

level=DEBUG

formatter=form02

args=(‘python.log’, ‘w’)

下面是formatter的配置

[formatter_form01]

format=F1 %(asctime)s %(levelname)s %(message)s

datefmt=

class=logging.Formatter

format字段是全局格式字符串,datefmt是strftime()兼容的date/time格式字符串,為空時使用默認的ISO8601格式,比如2003-01-23 00:29:50,411,class字段表示formatter的類名,

日誌級別如下:

Level Numeric value

CRITICAL 50

ERROR 40

WARNING 30

INFO 20

DEBUG 10

NOTSET 0

logging.handlers解讀

logging模塊中定義了這3個handler:StreamHandler, FileHandler and NullHandler

其它的handler都在logging.handler中定義,一併說明如下:

StreamHandler

該類位於logging包,將logging output輸出到流中,比如sys.stdout,sys.stderr或任何支持write()和flush()方法的類文件對象

class logging.StreamHandler(stream=None)

假如指定了stream名稱,日誌將輸出到流實例中,否則,日誌輸出到sys.stderr

FileHandler

該類位於logging包,將logging output輸出到磁盤文件中,文件默認無限增長

class logging.FileHandler(filename, mode=’a’, encoding=None, delay=False)

打開指定的文件並記錄日誌,假如mode沒有設置,默認使用’a’表示追加日誌到文件中。

NullHandler

該對象什麼也不處理

WatchedFileHandler

一個FileHandler實例,監視日誌文件的變化,假如文件變化了,它會關閉並重新打開,不建議在Windows下使用

文件的變化可以發生,當應用程序使用newsyslog和logrotate來實現日誌文件的回滾時。這個handle是在Unix/Linux下面,監視文件是否改變。(一個文件認為改變了,假如它的device厚實inode已經改變),將舊的文件關閉,這個流打開。

class logging.handlers.WatchedFileHandler(filename[, mode[, encoding[, delay]]])

指定的文件被打開,用來記錄日誌,假如mode未指示,默認使用a

RotatingFileHandler

支持磁盤文件的回滾

class logging.handlers.RotatingFileHandler(filename, mode=’a’, maxBytes=0, backupCount=0, encoding=None, delay=0)

你可以使用 maxBytes和backupCount值去讓日誌文件在預設大小時回滾。只要日誌文件在長度上接近maxBytes時,就會關閉舊日誌文件,打開一個新的日誌文件,實現回滾。假如maxBytes或backupCount為0,回滾不會發生。假如backupCount非零,系統會備份舊文件,文件名後加‘.1’, ‘.2’ 。比如,日誌文件名為app.log,backupCount為5,將會得到app.log, app.log.1, app.log.2, 直到app.log.5這6個文件。寫入日誌的文件總是app.log,當這個文件填滿時,就關閉它並重命名為app.log.1, 假如還存在app.log.1, app.log.2等文件,就逐一改名為app.log.2, app.log.3等等。

TimedRotatingFileHandler

支持在指定時間段內回滾日誌

class logging.handlers.TimedRotatingFileHandler(filename, when=’h’, interval=1, backupCount=0, encoding=None, delay=False, utc=False)

回滾基於when和interval設置,when指定interval的類型,參見下表,大小寫不敏感,默認按小時回滾

Value Type of interval

‘S’ Seconds

‘M’ Minutes

‘H’ Hours

‘D’ Days

‘W0’-‘W6’ Weekday (0=Monday)

‘midnight’ Roll over at midnight

回滾擴展名使用strftime format %Y-%m-%d_%H-%M-%S或其頭部子字符串,當使用基於weekday的回滾時,W0表示周一,……,W6表示周日,interval的值不會用到

backupCount表示備份數,當日誌很多時,新日誌會覆蓋舊日誌,刪除邏輯使用interval值去決定刪除哪些日誌文件

utc為true,表示使用UTC時間,否則使用本地時間

SocketHandler

通過網絡套接字輸出日誌,SocketHandler類的基類使用TCP socket

class logging.handlers.SocketHandler(host, port)

向指定地址和端口的遠程主機發送日誌

DatagramHandler

繼承自基類SocketHandler類,使用UDP socket發送日誌message

class logging.handlers.DatagramHandler(host, port)

SysLogHandler

發送日誌到遠程或是本地unix syslog

class logging.handlers.SysLogHandler(address=(‘localhost’, SYSLOG_UDP_PORT), facility=LOG_USER, socktype=socket.SOCK_DGRAM)

NTEventLogHandler

發送日誌消息到本地Windows NT, Windows 2000 or Windows XP event log

class logging.handlers.NTEventLogHandler(appname, dllname=None, logtype=’Application’)

SMTPHandler

通過SMTP將日誌消息發送到email address

MemoryHandler

支持將日誌message緩存到內存中,周期性刷新日誌到target handler

class logging.handlers.BufferingHandler(capacity)

class logging.handlers.MemoryHandler(capacity, flushLevel=ERROR, target=None)

HTTPHandler

使用GET或是POST,將日誌message發送到web server

class logging.handlers.HTTPHandler(host, url, method=’GET’)

操作數據庫的時候怎麼生成日誌文件 python3

日誌可以用來記錄應用程序的狀態、錯誤和信息消息,也經常作為調試程序的工具。它的重要性就不多說了,直接進入正題。

python提供了一個標準的日誌接口,就是logging模塊。日誌級別有DEBUG、INFO、WARNING、ERROR、CRITICAL五種。

首先來看logging簡單的使用方法。

這一看到此圖中使用了debug()、info()、warning()、error()、critical()五個方法,這五個方法分別用來記錄DEBUG、INFO、WARNING、ERROR、CRITICAL級別的日誌。但是你會發現debug()和info()方法沒有顯示任何信息,這是因為默認的日誌級別是ERROR ,所以低於此級別的日誌不會記錄。你還可能會疑惑輸出來的日誌怎麼這樣子?別急,往下看,慢慢來解釋。

下面我們來看怎麼修改一下日誌級別。

如圖上所示,可以使用basicConfig()方法,修改日誌級別,logging.DEBUG,logging.INFO,logging.WARNING,logging.ERROR,logging.CRITICAL分別代表着那五中日誌級別。可以看到圖中日誌級別設為INFO,那麼INFO級別以上的日誌都會被記錄。

下面再看下怎麼修改日誌的輸出格式。

查看下執行結果:

這個示例內容可能有點多了,沒關係,我們一點一點來。

首先程序中:

log_format = ‘%(filename)s [%(asctime)s] [%(levelname)s] %(message)s’

#這條是定義日誌格式的一個變量。顯示的條目可以是以下內容:

%(levelname):日誌級別的名字格式

%(levelno)s:日誌級別的數字表示

%(name)s:日誌名字

%(funcName)s:函數名字

%(asctime):日誌時間,可以使用datefmt去定義時間格式,如上圖。

%(pathname):腳本的絕對路徑

%(filename):腳本的名字

%(module):模塊的名字

%(thread):thread id

%(threadName):線程的名字

logging.basicConfig(format=log_format,datefmt=’%Y-%m-%d %H:%M:%S %p’,level=logging.DEBUG) #設置日誌輸出格式和級別。

上面的示例都是將日誌輸出到屏幕上,能不能寫到一個日誌文件中呢?答案當然是肯定的,來看:

看下執行結果:

看了吧,日誌的設置都是使用basicConfig()方法,需要注意的是,日誌寫入文件的默認方式是‘a’,也就是追加,如果想覆蓋文件,則使用如上圖那樣,使用filemode=’w’。

以上是logging模塊最常用的了,基本上就夠用了。但是如果你覺得這些還不夠的話,看我下一篇博客。會講Logger、Handler、Formatter對象,logging模塊更高級的用法用法。

python日誌模塊記錄三_日誌命名_日誌輪轉

在日誌記錄中,我們往往要能看到是什麼哪裡出錯了。可以通過日誌名字記錄哪裡出錯了。而日誌也需要輪轉,一個日誌文件不能無限大,也需要備份。所以有了通過日誌名的靈活配置,和通過設置handler文件輸出調用 logging.handlers.RotatingFileHandler 方法來實現輪轉和備份。

my_logging文件如下配置

python中四種配置文件

常用的配置文件後綴是.ini、.conf、.py,當然還有使用.json、.txt的,推薦使用常用的.ini、.py,配置文件的名字一般是config便於理解和使用。

ini配置文件,這類配置文件我們使用內置configparser庫來使用,它可以實現配置文件的寫入、更新、刪除、讀取等操作非常方便,建議使用這種方式。

新建一個config.ini的配置文件內容如下,編碼格式要是 utf-8 以免出錯。:

其中[]中的是section節點,該節點下的等式是option即鍵=值

然後每一行寫一個option ,每個選項就是一個option。直接寫名字,後面加 ” = ” 再加上它的值就行,字符串的表示不要加引號,否則引號也會被解析出來。

可以在配置文件中加入注釋 ,但是注釋必須是單獨的一行,且以 “#” 開頭。只是每次運行時不會讀入注釋,只要運行一次,寫入文件後,所有的注釋都會消失。

config.json文件

使用python內置的 json 標準庫進行解析ini文件。

load() 從json文件中讀取json格式數據

loads() 將字符串類型數據轉化為json格式數據

dump() 將json格式數據保存到文件

dumps() 將json格式數據保存為字符串類型

TOML的語法廣泛地由key = “value”、[節名]、#注釋構成。

支持以下數據類型:字符串、整形、浮點型、布爾型、日期時間、數組和圖表。

config.toml文件

使用外部庫 toml 解析toml文件。

安裝:pip install toml

讀取文件

安裝:

YAML是目前最推薦的配置文件格式。優秀的配置文件標準它幾乎都有:

容易閱讀和修改,支持注釋。

支持豐富的數據類型。

不同格式的明確表達。

yaml使用時需要注意:

yaml強制縮進。雖然不規定具體縮進幾個空格,但是同一級的內容要保持相同的縮進。

冒號後面一定要加空格, 否則無法解析。

python解析 yaml 可以使用pyyaml庫,操作和標準的文件操作非常類似:

得到的data就是解析後的數據,在python當中,它是一個嵌套的字典:

想獲取某一項配置,再通過字典的操作獲取:

config.yaml文件

讀取

Python日誌—Python日誌模塊logging介紹

從事與軟件相關工作的人,應該都聽過“日誌”一詞。

日誌就是跟蹤軟件運行時事件的方法,為了能夠在程序運行過程中記錄錯誤。

通過日誌記錄程序的運行,方便我們查詢信息,以便追蹤問題、進行維護和調試、還是數據分析。

並且各編程語言都形成了各自的日誌體系和相應的框架。

日誌的作用總結:

首先我們要樹立一個觀點,那就是“不是為了記錄日誌而記錄日誌,日誌也不是隨意記的”。要實現能夠只通過日誌文件還原整個程序執行的過程,達到能透明地看到程序里執行情況,每個線程每個過程到底執行結果的目的。日誌就像飛機的黑匣子一樣,應當能夠復原異常的整個現場乃至細節。

在項目中,日誌這個功能非常重要,我們要重視起來。

在Python中,使用logging模塊來進行日誌的處理。

logging是Python的內置模塊,主要用於將日誌信息進行格式化內容輸出,可將格式化內容輸出到文件,也可輸出到屏幕。

我們在開發過程中,常用print()函數來進行調試,但是在實際應用的部署時,我們要將日誌信息輸出到文件中,方便後續查找以及備份。

在我們使用日誌管理時,我們也可以將日誌格式化成Json對象轉存到ELK中方便圖形化查看及管理。

logging模塊將日誌系統從高向低依次定義了四個類,分別是logger(日誌器)、handler(處理器)、filter(過濾器)和formatter(格式器)。其中由日誌器生成的實例將接管原本日誌記錄函數logging.log的功能。

說明:

我們先來思考下下面的兩個問題:

在軟件開發階段或部署開發環境時,為了儘可能詳細的查看應用程序的運行狀態來保證上線後的穩定性,我們可能需要把該應用程序所有的運行日誌全部記錄下來進行分析,這是非常耗費機器性能的。

當應用程序正式發布或在生產環境部署應用程序時,我們通常只需要記錄應用程序的異常信息、錯誤信息等,這樣既可以減小服務器的I/O壓力,也可以避免我們在排查故障時被淹沒在日誌的海洋里。

那麼怎樣才能在不改動應用程序代碼的情況下,根據事件的重要性或者稱之為等級,實現在不同的環境中,記錄不同詳細程度的日誌呢?

這就是日誌等級的作用了,我們通過配置文件指定我們需要的日誌等級就可以了。

說明:

總結:

開發應用程序時或部署開發環境時,可以使用DEBUG或INFO級別的日誌獲取儘可能詳細的日誌信息,可以方便進行開發或部署調試。 應用上線或部署生產環境時,應用使用WARNING或ERROR或CRITICAL級別的日誌,來降低機器的I/O壓力和提高獲取錯誤日誌信息的效率。 日誌級別的指定通常都是在應用程序的配置文件中進行指定的。 不同的應用程序所定義的日誌等級會有所差別,根據實際需求來決定。

python之配置日誌的幾種方式

1)使用Python代碼顯式的創建loggers, handlers和formatters並分別調用它們的配置函數;

2)創建一個日誌配置文件,然後使用fileConfig()函數來讀取該文件的內容;

3)創建一個包含配置信息的dict,然後把它傳遞個dictConfig()函數;

原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/129999.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
簡單一點的頭像簡單一點
上一篇 2024-10-03 23:27
下一篇 2024-10-03 23:27

相關推薦

  • Cron執行日誌用法介紹

    本文將從多個方面對cron執行日誌進行詳細闡述,包括cron執行日誌的定義、cron執行日誌的產生原因、cron執行日誌的格式以及如何解讀cron執行日誌。 一、定義 Cron是一…

    編程 2025-04-29
  • Hibernate日誌打印sql參數

    本文將從多個方面介紹如何在Hibernate中打印SQL參數。Hibernate作為一種ORM框架,可以通過打印SQL參數方便開發者調試和優化Hibernate應用。 一、通過配置…

    編程 2025-04-29
  • 光模塊異常,SFP未認證(entityphysicalindex=6743835)——解決方案和

    如果您遇到類似optical module exception, sfp is not certified. (entityphysicalindex=6743835)的問題,那麼…

    編程 2025-04-29
  • 使用Snare服務收集日誌:完整教程

    本教程將介紹如何使用Snare服務收集Windows服務器上的日誌,並將其發送到遠程服務器進行集中管理。 一、安裝和配置Snare 1、下載Snare安裝程序並安裝。 https:…

    編程 2025-04-29
  • Python模塊下載與安裝指南

    如果想要擴展Python的功能,可以使用Python模塊來實現。但是,在使用之前,需要先下載並安裝對應的模塊。本文將從以下多個方面對Python模塊下載與安裝進行詳細的闡述,包括使…

    編程 2025-04-29
  • Python編程三劍客——模塊、包、庫

    本文主要介紹Python編程三劍客:模塊、包、庫的概念、特點、用法,以及在實際編程中的實際應用,旨在幫助讀者更好地理解和應用Python編程。 一、模塊 1、概念:Python模塊…

    編程 2025-04-29
  • 如何使用pip安裝模塊

    pip作為Python默認的包管理系統,是安裝和管理Python包的一種方式,它可以輕鬆快捷地安裝、卸載和管理Python的擴展庫、模塊等。下面從幾個方面詳細介紹pip的使用方法。…

    編程 2025-04-28
  • Python如何下載第三方模塊

    想要使Python更加強大且具備跨平台性,我們可以下載許多第三方模塊。下面將從幾個方面詳細介紹如何下載第三方模塊。 一、使用pip下載第三方模塊 pip是Python的軟件包管理器…

    編程 2025-04-28
  • 金融閱讀器提示配置文件無法識別

    在使用金融閱讀器過程中,有時會遇到提示配置文件無法識別的情況。這種情況通常是由於配置文件中存在錯誤或不完整所導致的。本文將從多個方面對此問題進行詳細的闡述,並提供相應解決方法。 一…

    編程 2025-04-28
  • Log4j日誌打印到Systemout.log

    Log4j是Apache的一個強大的日誌組件,可以幫助開發者更好地管理日誌。在Java應用程序中,很多開發者都會選擇使用Log4j來實現日誌輸出。本文將介紹如何使用Log4j將日誌…

    編程 2025-04-28

發表回復

登錄後才能評論