Файл журнала не дает желаемого результата, не может найти ошибку в коде - PullRequest
0 голосов
/ 04 января 2019

Я создаю три файла журнала для каждого региона, как показано ниже.Если region1 присутствует в имени файла, то его статус, независимо от того, передан он или нет, будет показан в 'region1.log' аналогично для region2 и region3.Я передаю файлы из одной папки в другую.

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)

Проблема заключается в следующем:

In region1.log region2.log region3.log его состояние печати всех трех областей, тогда как согласно кодудля region1.log if 'region1' in i: он должен дать статус переданного или сбойного только для region1.

Где я иду не так?Пожалуйста, помогите !!!

1 Ответ

0 голосов
/ 04 января 2019

Вам нужно дать разные имена при звонке 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...