首页 > 解决方案 > 日志文件没有给出想要的结果,在代码中找不到错误

问题描述

我正在为每个区域创建三个日志文件,如下所示。如果region1文件名中存在 ,则其状态(无论是已传输还是失败)将'region1.log'类似地显示为region2region3。我正在将文件从一个文件夹传输到另一个文件夹。

import os
from os import path
import shutil
import logging
import paramiko

formatter = logging.Formatter('%(asctime)s %(levelname)s[%(filename)s:%(lineno)d] %(message)s') 

def setup_logger(name, log_file, level=logging.INFO):
    handler = logging.FileHandler(log_file)        
    handler.setFormatter(formatter)

    logger = logging.getLogger(name)
    logger.setLevel(level)
    logger.addHandler(handler)

    return logger


src = "source_path"
dst = "destination_path"
files = os.listdir(src)

for i in files:
    if 'region1' in i:
       logger1 = setup_logger('',"region1.log" )

        #print(i)
       try:
            filename = os.path.join(src, i)
            shutil.move(filename, dst)
            logger1.info(i + '   tranferred')
       except:
            logger1.error(i + '   failed')


    elif 'region2' in i:
        logger2 = setup_logger('',"region2.log" )

        #print(i)
        try:
            filename = os.path.join(src, i)
            shutil.move(filename, dst)
            logger2.info(i + '   tranferred')
        except:
            logger2.error(i + '   failed')

    elif 'region3' in i:
        logger3 = setup_logger('',"region3.log" )

        #print(i)
        try:
            filename = os.path.join(src, i)
            shutil.move(filename, dst)
            logger3.info(i + '   tranferred')
        except:
            logger3.error(i + '   failed')

    else:
        print(i)

问题是:

region1.log region2.log region3.log所有三个区域的打印状态中,而根据代码,region1.log if 'region1' in i:它应该只为 region1 提供已转移或失败的状态。

我哪里错了?请帮忙!!!

标签: pythonlogging

解决方案


调用时需要提供不同的名称setup_logger()。如果您每次都使用相同的名称,logging.getLogger()将返回相同的记录器对象,并且您只需在调用logger.addHandler(). 由于记录器记录到它的所有处理程序,所有消息最终都在所有文件中。

您还可以在每个区域的案例中删除所有相同的代码,并在一个地方执行此操作。

for i in files:
    if 'region1' in i:
        logger = setup_logger('region1', 'region1.log')
    elif 'region2' in i:
        logger = setup_logger('region2', 'region2.log')
    elif 'region3' in i:
        logger = setup_logger('region3', 'region3.log')
    else:
        print(i)
        continue

    try:
        filename = os.path.join(src, i)
        shutil.move(filename, dst)
        logger.info(i + '   tranferred')
    except:
        logger.error(i + '   failed')

推荐阅读