[Python]使用logging創建兩個以上的日誌紀錄

更新於 發佈於 閱讀時間約 10 分鐘

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的方法,結果複寫在同一份文件上了,沒有想像中的分開創建紀錄日誌。

basicConfig

basicConfig

logging.FileHandler

使用這方法,成功實現了,分別創建紀錄日誌,這樣在以後開發上,根據不同的狀況另外撰寫Log紀錄,可靈活運用在debug上。

FileHandler用法結果

FileHandler用法結果


兩者的差異

  1. logging.basicConfig
    • logging.basicConfig 是用於設置默認的日誌記錄器和處理器的函數。
    • 通常在程式的頂層調用一次,用於設置全局的日誌配置
    • 如果使用 logging.basicConfig,則會自動創建一個默認日誌記錄器對象,並將日誌消息記錄到指定的日誌文件中。
  2. logging.FileHandler
    • logging.FileHandler 是用於創建一個將日誌消息寫入文件的處理器對象。
    • 它可以手動創建並新增到日誌記錄器對象中,用於指定特定的日誌文件和日誌格式。
    • 使用 logging.FileHandler 可以更靈活地控制日誌記錄的行為,例如可以為不同的日誌記錄器創建不同的文件處理器,實現將日誌消息分別記錄到不同的日誌文件中。

參考文獻





留言
avatar-img
留言分享你的想法!
螃蟹_crab-avatar-img
發文者
2024/08/03
[Python]使用logging創造改良版日誌紀錄器,不重複紀錄提及了這篇文章,趕快過去看看吧!
螃蟹_crab-avatar-img
發文者
2024/05/17
[Python]使用多個logging如何追蹤呼叫它的函式及行數提及了這篇文章,趕快過去看看吧!
avatar-img
螃蟹_crab的沙龍
141會員
253內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
螃蟹_crab的沙龍的其他內容
2025/04/15
在軟體開發或部署過程中,我們經常需要對多個 .ini 設定檔進行批次修改,例如將某個舊的參數名稱或路徑名稱,替換成新的命名。 這就像記事本的「全部取代」功能,但你不需要一個個打開檔案慢慢點——你可以用 Python 自動完成這些事! 本文將介紹一個 Python 函式:search_and_re
2025/04/15
在軟體開發或部署過程中,我們經常需要對多個 .ini 設定檔進行批次修改,例如將某個舊的參數名稱或路徑名稱,替換成新的命名。 這就像記事本的「全部取代」功能,但你不需要一個個打開檔案慢慢點——你可以用 Python 自動完成這些事! 本文將介紹一個 Python 函式:search_and_re
2025/04/11
🐶 什麼是 Watchdog? Watchdog 是一個 Python 套件,用來即時監控檔案系統的變化。它可以在資料夾內有「新增」、「修改」、「刪除」等事件時,立即觸發事件處理函式,不需要手動輪詢 (polling),效率高又省資源。 ✅ Watchdog 的特點: 採用 OS 層級的檔案
2025/04/11
🐶 什麼是 Watchdog? Watchdog 是一個 Python 套件,用來即時監控檔案系統的變化。它可以在資料夾內有「新增」、「修改」、「刪除」等事件時,立即觸發事件處理函式,不需要手動輪詢 (polling),效率高又省資源。 ✅ Watchdog 的特點: 採用 OS 層級的檔案
2025/01/12
用 PyInstaller 打包一個簡單計算機應用 (GUI 使用 PyQt5) 本教學將帶您使用 PyQt5 建立一個簡單的計算機應用,並透過 PyInstaller 將其打包成執行檔(EXE)。 1. 安裝所需環境 在開始之前,請確保您已安裝以下工具: 必要套件 Python: 建
Thumbnail
2025/01/12
用 PyInstaller 打包一個簡單計算機應用 (GUI 使用 PyQt5) 本教學將帶您使用 PyQt5 建立一個簡單的計算機應用,並透過 PyInstaller 將其打包成執行檔(EXE)。 1. 安裝所需環境 在開始之前,請確保您已安裝以下工具: 必要套件 Python: 建
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
呈上篇,若是在大型系統中使用,重複被調用時,在每次紀錄時都會創建一個新的 FileHandler,這會導致日誌處理器不斷累積,從而使日誌重複記錄。 [Python]使用logging創建兩個以上的日誌紀錄 使用__new__的方法來避免重複調用 改良後 setup_logger 方法中創建一
Thumbnail
呈上篇,若是在大型系統中使用,重複被調用時,在每次紀錄時都會創建一個新的 FileHandler,這會導致日誌處理器不斷累積,從而使日誌重複記錄。 [Python]使用logging創建兩個以上的日誌紀錄 使用__new__的方法來避免重複調用 改良後 setup_logger 方法中創建一
Thumbnail
呈上次使用logging來撰寫日誌,利用類別包裝的方式,可實現多個日誌紀錄器,但發現這樣就失去它原先,可以回傳是誰呼叫他並記錄行數的功能。 [Python]使用logging創建兩個以上的日誌紀錄 若開啟函式名稱、行數及訊息的功能,就會像這樣,幾乎都是記錄到,我定義中類別的函式
Thumbnail
呈上次使用logging來撰寫日誌,利用類別包裝的方式,可實現多個日誌紀錄器,但發現這樣就失去它原先,可以回傳是誰呼叫他並記錄行數的功能。 [Python]使用logging創建兩個以上的日誌紀錄 若開啟函式名稱、行數及訊息的功能,就會像這樣,幾乎都是記錄到,我定義中類別的函式
Thumbnail
logging 是 Python 中用於記錄程式運行時信息的模組,它可以幫助你在開發過程中更好地管理和追蹤程式的執行狀態和錯誤信息。 本文較著重使用兩種不同的方法來創建日誌紀錄。 其他有關logging的教學,我推薦以下文章,他介紹蠻詳細的,我就不多贅述了。
Thumbnail
logging 是 Python 中用於記錄程式運行時信息的模組,它可以幫助你在開發過程中更好地管理和追蹤程式的執行狀態和錯誤信息。 本文較著重使用兩種不同的方法來創建日誌紀錄。 其他有關logging的教學,我推薦以下文章,他介紹蠻詳細的,我就不多贅述了。
Thumbnail
Lambda Log 是存放至 CloudWatch Logs, 格式跟log level只能預設,但現今是可以修改的 Log 格式:Text Log level:無 Log Group :/aws/lambda/Function Name 實驗開始 新建立測試Functi
Thumbnail
Lambda Log 是存放至 CloudWatch Logs, 格式跟log level只能預設,但現今是可以修改的 Log 格式:Text Log level:無 Log Group :/aws/lambda/Function Name 實驗開始 新建立測試Functi
Thumbnail
我們在進行Linux作業時, 常常會撰寫一些腳本來進行我們的任務, 而我們執行任務當下假如沒有將當時的參數紀錄起來常常事後追朔時很容易就遺漏掉, 尤其是在AI模型訓練這一塊, 每次的訓練都是好幾個小時甚至好幾天⏱️⏱️⏱️, 我們常常會需要對模型訓練的參數與結果進行分析, 那麼蛛絲馬跡就非常重要了,
Thumbnail
我們在進行Linux作業時, 常常會撰寫一些腳本來進行我們的任務, 而我們執行任務當下假如沒有將當時的參數紀錄起來常常事後追朔時很容易就遺漏掉, 尤其是在AI模型訓練這一塊, 每次的訓練都是好幾個小時甚至好幾天⏱️⏱️⏱️, 我們常常會需要對模型訓練的參數與結果進行分析, 那麼蛛絲馬跡就非常重要了,
Thumbnail
您是否苦於網路資訊爆炸嗎? 教學何其多,但卻無法好好選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 系統運行的過程中難免會發生一點小插曲, 意外難免, 但
Thumbnail
您是否苦於網路資訊爆炸嗎? 教學何其多,但卻無法好好選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 系統運行的過程中難免會發生一點小插曲, 意外難免, 但
Thumbnail
在第十四課中,我們將探討 Python 中的檔案操作,包括如何讀取、寫入和管理文件。這對於許多實際應用場景都是必要的,例如日誌記錄、資料分析和資料持久化。
Thumbnail
在第十四課中,我們將探討 Python 中的檔案操作,包括如何讀取、寫入和管理文件。這對於許多實際應用場景都是必要的,例如日誌記錄、資料分析和資料持久化。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News