I\'m trying to write Python log files directly to S3 without first saving them to stdout. I want the log files to be written to S3 automatically when the program is done run
You need to add a couple things here. First, create a StringIO object. Then, write the logs to the StringIO object using a logging StreamHandler. Add the handler to your logger. Finally, call the getvalue()
method on the StringIO object. You can write that to S3.
import atexit
import io
import logging
import boto3
def write_logs(body, bucket, key):
s3 = boto3.client("s3")
s3.put_object(Body=body, Bucket=bucket, Key=key)
log = logging.getLogger("some_log_name")
log_stringio = io.StringIO()
handler = logging.StreamHandler(log_stringio)
log.addHandler(handler)
atexit.register(write_logs, body=log_stringio.getvalue(), bucket="bucket_name", key="key_name")
log.info("Hello S3")
quit()