[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
128會員
209內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
在實務上,若Python報錯時,若引入的套件越多伴隨的異常訊息會變得越來越複雜,看到一推密密麻麻的內容時,很多時候都想直接跳過。 本文將利用Traceback來讓異常訊息變得更好理解。
讀取ini配置文件時如果某個參數不存在,它就會報錯,要怎麼避免呢? 可以使用fallback 參數來指定預設值。 這樣即使配置文件中缺少一些參數,我們的程序也能正常運行並使用預設值。 讓我們來假設一個案例做說明: 先故意將先前範例的port的資料刪掉。
INI 檔案是一種配置檔案格式,常用於保存設定資料和組態資訊。 它使用簡單的鍵值對結構來組織資料,通常用於程式、應用程式或操作系統中的配置和初始化設定。 INI 檔案每個鍵值對包含一個名稱(鍵)和對應的值。 基本的檔案格式如下: [Section1] Key1 = Value1 Key2 =
讓我們從程式開始看起,我們輸入的鍵都是KeY,卻在寫入ini時,都轉換成小寫了。 因為預設情況下,configparser 會將配置文件中的鍵(Key)轉換成小寫形式。也就是說,即使配置文件中鍵的寫法是大寫或混合大小寫,讀取時都會轉換成小寫。 如以下的程式範例 其中的鍵值為KeY1 KeY2
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
當我們在做很多處理時,結果可能會是List包住一些數值,例如找輪廓或連通域分析時,沒有剛好的特徵可能就會有List含(空值得)形式出現。 為了避免報錯,我們就要額外先做一些處理,先做判斷是否有值在往下一個階段。 all 和 any 是 Python 中用於檢查可迭代物件(如清單、元組、集合等)
在實務上,若Python報錯時,若引入的套件越多伴隨的異常訊息會變得越來越複雜,看到一推密密麻麻的內容時,很多時候都想直接跳過。 本文將利用Traceback來讓異常訊息變得更好理解。
讀取ini配置文件時如果某個參數不存在,它就會報錯,要怎麼避免呢? 可以使用fallback 參數來指定預設值。 這樣即使配置文件中缺少一些參數,我們的程序也能正常運行並使用預設值。 讓我們來假設一個案例做說明: 先故意將先前範例的port的資料刪掉。
INI 檔案是一種配置檔案格式,常用於保存設定資料和組態資訊。 它使用簡單的鍵值對結構來組織資料,通常用於程式、應用程式或操作系統中的配置和初始化設定。 INI 檔案每個鍵值對包含一個名稱(鍵)和對應的值。 基本的檔案格式如下: [Section1] Key1 = Value1 Key2 =
讓我們從程式開始看起,我們輸入的鍵都是KeY,卻在寫入ini時,都轉換成小寫了。 因為預設情況下,configparser 會將配置文件中的鍵(Key)轉換成小寫形式。也就是說,即使配置文件中鍵的寫法是大寫或混合大小寫,讀取時都會轉換成小寫。 如以下的程式範例 其中的鍵值為KeY1 KeY2
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
當我們在做很多處理時,結果可能會是List包住一些數值,例如找輪廓或連通域分析時,沒有剛好的特徵可能就會有List含(空值得)形式出現。 為了避免報錯,我們就要額外先做一些處理,先做判斷是否有值在往下一個階段。 all 和 any 是 Python 中用於檢查可迭代物件(如清單、元組、集合等)
你可能也想看
Google News 追蹤
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
介紹工作後幾個常見的小問題,包括寫 Log 的好習慣、本地印出錯誤或過程、PHPCS 工具、變數儲存於設定檔、避免魔術數字、程式碼靜態分析與動態分析。
Thumbnail
瞭解如何在Xcode15及以上使用Logger進行更好的程式debug。Logger可以更好的組織Log,但也有一些缺點需要注意。本文將介紹Logger的基本使用方式,以及一些注意事項。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
目的: 透過記錄&回顧,不斷對自己反覆提問,找出思考的盲點/共通點。就能發現自己想做的事,找到改變未來的方向。   紀錄:  每天用一句話紀錄一天最讓你在意或關注的事,工作及生活上成功/失敗的事。內容需要讓你能夠回想起當時的心境,回顧時效果才會好。   寫法: 也可針對電影、閱讀、
Thumbnail
設計程式來讀取欲傳送訊息之參數txt檔案,再利用程式自動傳出訊息至LINE群組。能簡易使用於任何場合。
Thumbnail
大數據時代下,Log的多元應用至關重要。Log生成龐大,格式各異,特別金融業需合規。探討Log廣泛應用、資訊安全、IT管理和商業決策。建立Log管理系統核心深入法規,強化IT治理、權限控管。一站式Log管理平台,確保資訊安全合規。
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
介紹工作後幾個常見的小問題,包括寫 Log 的好習慣、本地印出錯誤或過程、PHPCS 工具、變數儲存於設定檔、避免魔術數字、程式碼靜態分析與動態分析。
Thumbnail
瞭解如何在Xcode15及以上使用Logger進行更好的程式debug。Logger可以更好的組織Log,但也有一些缺點需要注意。本文將介紹Logger的基本使用方式,以及一些注意事項。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
目的: 透過記錄&回顧,不斷對自己反覆提問,找出思考的盲點/共通點。就能發現自己想做的事,找到改變未來的方向。   紀錄:  每天用一句話紀錄一天最讓你在意或關注的事,工作及生活上成功/失敗的事。內容需要讓你能夠回想起當時的心境,回顧時效果才會好。   寫法: 也可針對電影、閱讀、
Thumbnail
設計程式來讀取欲傳送訊息之參數txt檔案,再利用程式自動傳出訊息至LINE群組。能簡易使用於任何場合。
Thumbnail
大數據時代下,Log的多元應用至關重要。Log生成龐大,格式各異,特別金融業需合規。探討Log廣泛應用、資訊安全、IT管理和商業決策。建立Log管理系統核心深入法規,強化IT治理、權限控管。一站式Log管理平台,確保資訊安全合規。