[Python] 日誌按天分割,保存近一個月日誌

下方為code, 請根據自己需求去做調整, 主要是存放的路徑與log內的訊息格式

import datetime
import logging
import os
import pathlib
import re
from logging.handlers import TimedRotatingFileHandler


path = os.path.join(pathlib.Path(__file__).parent.absolute(), 'log')
log_folder_path = os.path.join(pathlib.Path(__file__).parent.parent.parent, 'log')  # 與service同層, 自行調整parent的次數,

try:
    if not os.path.isdir(log_folder_path):  # 如果日誌資料夾不存在,則建立資料夾
        os.mkdir(log_folder_path)
except Exception:
    print("建立資料夾失敗,資料夾路徑:" + log_folder_path)
    pass

log_name = 'serverlog'  # 自訂log檔名稱
logger = logging.getLogger(log_name)

log_filename = datetime.datetime.now().strftime("%Y-%m-%d.log")
log_path = os.path.join(log_folder_path, log_name)
logger.setLevel(logging.DEBUG)

# when: 為一天, backupCount: 30個log檔案
file_handler = TimedRotatingFileHandler(
    filename=log_path, when="MIDNIGHT", interval=1, backupCount=30
)
file_handler.suffix = "%Y-%m-%d.log"  # 可自訂
file_handler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}.log$") # 刪除過期log檔


# format_2 = '[%(asctime)s] [%(process)d] [%(levelname)s] - %(module)s.%(funcName)s (%(filename)s:%(lineno)d) - %(message)s'

# 可自訂想要的格式, 或是網路上提供的, 像format_2就給的訊息很多, 但本身不需要那麼多訊息可以自己訂些簡單的
file_handler.setFormatter(logging.Formatter('[%(asctime)s] %(levelname)1.4s: %(module)s:%(lineno)d %(message)s'))
logger.addHandler(file_handler)

檔案名稱如下, 名稱會照file_handler.suffix做修正。

發佈留言