下方為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做修正。