Python实现每个脚本对应独立日志文件的问题求助
问题:为每个Python脚本生成独立日志文件失败
期望目录结构:
- /FILES/File_1.py
- /FILES/File_2.py
- /LOGS/File_1.log
- /LOGS/File_2.log
- /LOGS/Main.log
- /log_config.py
- /main.py
尝试的实现代码
log_config.py
import logging def write_log(name): FORMAT = "%(asctime)s :: lvl: %(levelname)s :: line: %(lineno)d :: funcName: %(funcName)s :: message: %(message)s" logging.basicConfig( format=FORMAT, level=logging.DEBUG, filemode='w', filename="LOG/"+name+".log" )
main.py
from log_config import write_log, logging from FILES.File_1 import save_File_1 from FILES.File_2 import save_File_2 write_log("Main") logging.info('Test Main') save_File_1() save_File_2()
FILES/File_1.py
from log_config import write_log, logging def save_File_1(): write_log("File 1") logging.info("test File_1")
FILES/File_2.py
from log_config import write_log, logging def save_File_2(): write_log("File 2") logging.info("test File_2")
实际运行问题
仅生成Main.log一个日志文件,所有日志内容都写入其中:
2023-04-19 11:09:33,544 :: lvl: INFO :: line: 6 :: funcName: <module> :: message: Test Main 2023-04-19 11:09:33,544 :: lvl: INFO :: line: 6 :: funcName: save_File_1 :: message: test File_1 2023-04-19 11:09:33,544 :: lvl: INFO :: line: 6 :: funcName: save_File_2 :: message: test File_2
解决方案
问题根源
logging.basicConfig()仅会在根logger未配置时生效,第一次调用后,后续调用不会修改根logger的任何设置。你的代码里所有日志操作都使用根logger,所以不管后续调用多少次write_log(),日志始终输出到第一个指定的Main.log文件。
修改后的代码
log_config.py
import logging import os # 确保LOGS目录存在,避免创建文件时报错 os.makedirs("LOGS", exist_ok=True) def get_logger(name): # 创建自定义logger实例,每个name对应一个独立logger logger = logging.getLogger(name) logger.setLevel(logging.DEBUG) # 避免重复添加handler(防止多次调用get_logger时重复输出日志) if not logger.handlers: log_format = "%(asctime)s :: lvl: %(levelname)s :: line: %(lineno)d :: funcName: %(funcName)s :: message: %(message)s" formatter = logging.Formatter(log_format) # 创建对应脚本的日志文件handler file_handler = logging.FileHandler(f"LOGS/{name}.log", mode='w') file_handler.setFormatter(formatter) # 将handler绑定到当前logger logger.addHandler(file_handler) return logger
main.py
from log_config import get_logger from FILES.File_1 import save_File_1 from FILES.File_2 import save_File_2 # 获取Main专属的logger main_logger = get_logger("Main") main_logger.info('Test Main') save_File_1() save_File_2()
FILES/File_1.py
from log_config import get_logger def save_File_1(): # 获取File_1专属的logger logger = get_logger("File_1") logger.info("test File_1")
FILES/File_2.py
from log_config import get_logger def save_File_2(): # 获取File_2专属的logger logger = get_logger("File_2") logger.info("test File_2")
运行效果
执行main.py后,LOGS目录下会生成三个独立的日志文件:Main.log、File_1.log、File_2.log,每个文件仅包含对应脚本输出的日志内容。
内容的提问来源于stack exchange,提问作者Tarcisio Lopes
相关产品推荐
相关产品推荐

