在 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歡迎使用學生選課...