Python 將控制台輸出另存為日誌檔案

2021-10-13 19:15:49 字數 3694 閱讀 4381

在 pycharm 中或者說執行 python 程式時會使用 print 輸出些過程資訊、 traceback 異常資訊 到控制台,但是程式執行結束後記錄就沒有了,所以想著每次執行將資訊顯示在控制台的同時記錄到檔案中。

自定義建立 logger 類,結合 sys 進行記錄控制台輸出資訊

demo.py

import sys

import os

import time

# 控制台輸出記錄到檔案

class

logger

(object):

def__init__

(self, file_name=

"default.log"

, stream=sys.stdout)

: self.terminal = stream

self.log =

open

(file_name,

"a")

defwrite

(self, message)

: self.terminal.write(message)

self.log.write(message)

defflush

(self)

:pass

if __name__ ==

'__main__'

:# 自定義目錄存放日誌檔案

log_path =

'./logs/'

ifnot os.path.exists(log_path)

: os.makedirs(log_path)

# 日誌檔名按照程式執行時間設定

log_file_name = log_path +

'log-'

+ time.strftime(

"%y%m%d-%h%m%s"

, time.localtime())

+'.log'

# 記錄正常的 print 資訊

sys.stdout = logger(log_file_name)

# 記錄 traceback 異常資訊

sys.stderr = logger(log_file_name)

print

(5555

)print(2

/0)

./logs/log-20210103-140231.log

5555

traceback (most recent call last):

file "g:\codes\demo.py", line 33, in print(2/0)

zerodivisionerror: division by zero

將所有輸出全部直接儲存到檔案中,不再顯示到控制台

demo.py

import sys

log_print =

open

('de****st.log'

,'w'

)sys.stdout = log_print

sys.stderr = log_print

if __name__ ==

'__main__'

:print

(555

)print(2

/0)

default.log

555

traceback (most recent call last):

file "g:\codes\demo.py", line 9, in print(2/0)

zerodivisionerror: division by zero

功能更加全面,主要用於輸出執行日誌、設定輸出日誌的等級、日誌儲存路徑等等

必須放到 try……catch…… 裡面才能儲存 traceback 的錯誤的資訊,然後不能儲存 print (如果要儲存可以參考方法二,但是這樣控制台就沒有 print 了)

demo.py

import logging

import os

import time

import traceback

import sys

# 建立乙個 logger

logger = logging.getlogger(__name__)

# logger 的等級

logger.setlevel(level=logging.info)

# 建立乙個 handler,寫入日誌檔案

log_path =

'./logs/'

ifnot os.path.exists(log_path)

: os.makedirs(log_path)

log_file_name = log_path +

'log-'

+ time.strftime(

"%y%m%d-%h%m%s"

, time.localtime())

+'.log'

logfile = log_file_name

handler = logging.filehandler(logfile, mode=

'a+'

)# 輸入到日誌檔案中的日誌等級

handler.setlevel(logging.debug)

# 設定 handler 中日誌記錄格式

formatter = logging.formatter(

'%(asctime)s - %(name)s - %(levelname)s - %(message)s'

)handler.setformatter(formatter)

# 將 handler 新增到 logger 裡面

logger.addhandler(handler)

# 將日誌輸出到控制台,預設 sys.stderr

logger.addhandler(logging.streamhandler(sys.stdout)

)logger.info(

"start print log"

)if __name__ ==

'__main__'

:try

:print

(5555555555

)print(5

/0)except exception as e:

logger.error(

str(traceback.format_exc())

)

log-20210103-151751.log

2021-01-03 15:17:51,597 - __main__ - info - start print log

2021-01-03 15:17:51,597 - __main__ - error - traceback (most recent call last):

file "g:\codes\demo.py", line 34, in print(5/0)

zerodivisionerror: division by zero

16.6. logging — logging facility for python — python 3.6.12 documentation

overview — loguru documentation

控制台輸出控制

by jingzhongrong 通過win32api提供的函式,可以對控制台程式的輸出進行控制,例如字型顏色 標題文字,以及各種屬性等等。主要使用到的函式以及宣告如下 handle getstdhandle dword nstdhandle 此函式用於獲取控制台輸出 輸入控制代碼。得到控制代碼之後...

python控制台輸出顏色

python控制台輸出顏色,out 是基本方法,還封裝了一些基本顏色方法,如red blue green 等 out 方法的color引數表示顏色,bgcolor表示背景顏色,style表示樣式 其他方法的引數類似,三個引數的具體取值封裝到color類,bgcolor類,style類中。基本方法 o...

python 控制台輸出美化

格式 設定顏色開始 033 顯示方式 前景色 背景色m 說明 前景色 背景色 顏色 黑色 紅色綠色 黃色藍色 紫紅色青藍色 白色顯示方式 意義 終端預設設定 高亮顯示 使用下劃線 閃爍反白顯示 不可見 例子 033 1 31 40m 033 0m print 033 0 32 40m歡迎使用學生選課...