日志文件未提供期望的结果,无法在代码中找到错误

时间:2019-01-04 05:46:12

标签: python logging

我正在为每个区域创建三个日志文件,如下所示。如果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。

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

1 个答案:

答案 0 :(得分:1)

在调用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')