Загрузка файла журнала в корзину S3?

#python-3.x #amazon-s3 #logging #aws-glue

#python-3.x #amazon-s3 #ведение журнала #aws-клей

Вопрос:

У меня есть программа на python, и она отлично работает. Тем не менее, я решил вести некоторые журналы, чтобы отслеживать прогресс и выводить шаги в файле журнала. У меня возникли проблемы с тех пор, как я впервые использую библиотеку python для ведения журнала. Цель состоит в том, чтобы записать шаги в файл и загрузить его в S3. Чего мне не хватает, пожалуйста, просмотрите код ниже?

 start_time = time.time()
logging.basicConfig(filename='myLogFile.log', format='%(asctime)s %(levelname)s %(name)s: %(message)s', datefmt='%d-%b-%y %H:%M:%S', level=logging.INFO)
logger = logging.getLogger("GlueJob")
logging.info("Program started ....")
logger.setLevel(logging.INFO)
log_stringio = io.StringIO()
handler = logging.StreamHandler(log_stringio)
logger.addHandler(handler)

 Do Something .................
logging.info("List has all objects from S3 ... good")

Do Something ........................
logging.info("All created lists are populated with elements from S3 ... good")

DO Something ...........................
logging.info("Dictionary and Dataframe has been created ... good")

Do Something .......................
logging.info("Convert dataframe to csv ... good")

# here is the problem ....... Logfile is not uploading to S3 ### What am I missing??
s3.Bucket('my-bucket').upload_file(Filename='myLogFile.log', Key='/Asset_Filename_Database/folder1/folder2/myLogFile.log')

 print("Process Finsihed --- %s seconds ---" %(time.time() - start_time))
  

Спасибо!!!

Комментарии:

1. Примечание: я использую ресурс Boto3.

2. Какую ошибку вы получаете?

3. Ошибки нет … Загрузка не происходит…

Ответ №1:

При использовании / в имени ключа создается папка без имени Key='/Asset_Filename_Database/ , пожалуйста, используйте Key='Asset_Filename_Database вместо этого.


Я попытался запустить этот пример со всеми тремя экземплярами (object, client и bucket), у меня это работает.

 import logging
import io
import time
import boto3

start_time = time.time()
logging.basicConfig(filename='myLogFile.log', format='%(asctime)s %(levelname)s %(name)s: %(message)s', datefmt='%d-%b-%y %H:%M:%S', level=logging.INFO)
logger = logging.getLogger("GlueJob")
logging.info("Program started ....")
logger.setLevel(logging.INFO)
log_stringio = io.StringIO()
handler = logging.StreamHandler(log_stringio)
logger.addHandler(handler)

logging.info("List has all objects from S3 ... good")
logging.info("All created lists are populated with elements from S3 ... good")
logging.info("Dictionary and Dataframe has been created ... good")
logging.info("Convert dataframe to csv ... good")

s3 = boto3.resource('s3')
s3_client = boto3.client('s3')

s3_client.upload_file('myLogFile.log', 'test-kayd-bucket', 'client/myLogFile.log')

s3.Object('test-kayd-bucket', 'object/myLogFile.log').upload_file('myLogFile.log')
s3.Bucket('test-kayd-bucket').upload_file(Filename='myLogFile.log',  Key='bucket/myLogFile.log1')

print("Process Finsihed --- %s seconds ---" %(time.time() - start_time))