本文目錄一覽:
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怎麼實現遠程動態輸出日誌
#!/usr/bin/python
# encoding=utf-8
# Filename: monitorLog.py
import os
import signal
import subprocess
import time
logFile1 = “test1.log”
logFile2 = ‘test2.log’
#日誌文件一般是按天產生,則通過在程序中判斷文件的產生日期與當前時間,更換監控的日誌文件
#程序只是簡單的示例一下,監控test1.log 10秒,轉向監控test2.log
def monitorLog(logFile):
print ‘監控的日誌文件 是%s’ % logFile
# 程序運行10秒,監控另一個日誌
stoptime = time.strftime(‘%Y-%m-%d %H:%M:%S’, time.localtime(time.time() + 10))
popen = subprocess.Popen(‘tail -f ‘ + logFile, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
pid = popen.pid
print(‘Popen.pid:’ + str(pid))
while True:
line = popen.stdout.readline().strip()
# 判斷內容是否為空
if line:
print(line)
# 當前時間
thistime = time.strftime(‘%Y-%m-%d %H:%M:%S’, time.localtime(time.time()))
if thistime = stoptime:
# 終止子進程
popen.kill()
print ‘殺死subprocess’
break
time.sleep(2)
monitorLog(logFile2)
if __name__ == ‘__main__’:
monitorLog(logFile1)
多進程環境python logging列印日誌混亂問題
解決辦法如下:
多麼痛的領悟,困擾了這麼久的問題其實就是一個參數配置錯了。
fileMode:表示日誌文件的打開方式。w-直接寫,使用這個配置當系統重啟的時候日誌會清空,一個進程打開後其他進程是無法使用的;a-尾部追加,大家都可以打開往文件結尾進行追加寫入。
本人主語言是java,轉到python後日誌這塊踩了幾個坑。再說說另外一個坑,就是異常堆棧的列印問題,在java中logger是可以使用error直接列印出來的。在python中error跟其他日誌記錄方法沒太大差別,是無法列印異常堆棧的,列印堆棧請使用 logger.exception(“異常說明”, e) 。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/235795.html