You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:23:19