我正在为每个区域创建三个日志文件,如下所示。如果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)
问题是:
在region1.log
region2.log
region3.log
中,它在所有三个区域中的打印状态,而根据region1.log
if 'region1' in i:
的代码,它应该给出已转移或失败的状态仅适用于region1。
我要去哪里错了?请帮忙!!!
答案 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')