How Can I Write Logs Directly to AWS S3 from Memory Without First Writing to stdout? (Python, boto3)

后端 未结 1 482
孤独总比滥情好
孤独总比滥情好 2020-12-17 00:08

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

相关标签:
1条回答
  • 2020-12-17 00:43

    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()
    
    0 讨论(0)
提交回复
热议问题