logging
是 Python 中用於記錄程式運行時信息的模組,它可以幫助你在開發過程中更好地管理和追蹤程式的執行狀態和錯誤信息。
本文較著重使用兩種不同的方法來創建日誌紀錄。
其他有關logging
的教學,我推薦以下文章,他介紹蠻詳細的,我就不多贅述了。
以下使用logging
兩種不同的紀錄日誌的方法,來看哪一個是可以符合要求
使用logging.FileHandler
創建日誌
import os
import logging
from datetime import datetime
class WriteLogTxt:
'''
setup_logger 設置logging格式及創立文件夾
write_log_info 指定檔案名稱及log內容輸入
write_log_warning
'''
def __init__(self,file_path,file_name):
self.file_path = file_path
self.file_name = file_name
def setup_logger(self):
'''
設置logging格式及創立文件夾
'''
now = datetime.now()
year_month = now.strftime("%Y-%m") #取得字符串
log_folder = os.path.join(self.file_path, year_month)
# 檢查文件夾與文件是否存在
if not os.path.exists(log_folder):
os.makedirs(log_folder)
# 設置格式
log_format = "%(asctime)s - %(levelname)s - %(message)s" # 日期時間 日誌的等級名稱 訊息
file_handler = logging.FileHandler(os.path.join(log_folder, f"{self.file_name}_{now.date()}.log"))
file_handler.setLevel(logging.INFO)
file_handler.setFormatter(logging.Formatter(log_format))
# 設置logger
self.logger = logging.getLogger(self.file_name)
self.logger.setLevel(logging.INFO)
self.logger.addHandler(file_handler)
# 指定檔案名稱及log內容輸入
def write_log_info(self,log_content):
'''
log_content : Log
'''
# 寫入log
self.logger.info(f"{log_content}")
def write_log_warning(self,log_content):
'''
log_content : Log
'''
# 寫入log
self.logger.warning(f"{log_content}")
使用logging.basicConfig
import os
import logging
from datetime import datetime
class WriteLogTxt:
def __init__(self,file_path,file_name):
self.file_path = file_path
self.file_name = file_name
def setup_logger(self):
'''
設置logging格式及創立文件夾
'''
now = datetime.now()
year_month = now.strftime("%Y-%m") #取得字符串
log_folder = os.path.join(self.file_path, year_month)
# 檢查文件夾與文件是否存在
if not os.path.exists(log_folder):
os.makedirs(log_folder)
# 設置格式
log_format = "%(asctime)s - %(levelname)s - %(message)s" # 日期時間 日誌的等級名稱 訊息
logging.basicConfig(filename=os.path.join(log_folder, f"{self.file_name}_{datetime.now().date()}.log"),
level=logging.INFO, format=log_format)
# 指定檔案名稱及log內容輸入]
def write_log_info(self,log_content):
'''
log_content : Log
'''
# 寫入log
self.logger = logging.getLogger(self.file_name)
self.logger.info(f"{log_content}")
# 指定檔案名稱及log內容輸入]
def write_log_warning(self,log_content):
'''
log_content : Log
'''
# 寫入log
self.logger = logging.getLogger(self.file_name)
self.logger.warning(f"{log_content}")
兩者皆可以寫入Log,但要不同日誌紀錄器來做使用時,logging.basicConfig
方法就不適用了,以下來實際試試看
#調用第一個log_obj寫入log
log_obj = WriteLogTxt('D:/CRABpy/write/log','sample_1')
log_obj.setup_logger()
log_obj.write_log_info('test_1')
#調用第二個log_obj寫入log
log_obj_2 = WriteLogTxt('D:/CRABpy/write/log','sample_2')
log_obj_2.setup_logger()
log_obj_2.write_log_info('test_2')
logging.basicConfig
使用basicConfig
的方法,結果複寫在同一份文件上了,沒有想像中的分開創建紀錄日誌。
logging.FileHandler
使用這方法,成功實現了,分別創建紀錄日誌,這樣在以後開發上,根據不同的狀況另外撰寫Log紀錄,可靈活運用在debug上。
logging.basicConfig
:logging.basicConfig
是用於設置默認的日誌記錄器和處理器的函數。 logging.basicConfig
,則會自動創建一個默認的日誌記錄器對象,並將日誌消息記錄到指定的日誌文件中。logging.FileHandler
:logging.FileHandler
是用於創建一個將日誌消息寫入文件的處理器對象。 logging.FileHandler
可以更靈活地控制日誌記錄的行為,例如可以為不同的日誌記錄器創建不同的文件處理器,實現將日誌消息分別記錄到不同的日誌文件中。