Send EC2 Application Logs to AWS CloudWatch using Boto3 in Python

In this tutorial, we will show you how to send application logs to AWS CloudWatch using Boto3 in Python.

Follow the steps below, to send EC2 application logs to AWS CloudWatch:

Installing Boto3

Boto3 is a Software Development Kit for Python, maintained by Amazon Web Services.

Install the latest version of Boto3 S3 SDK using the following command:


pip install boto3

Sending Logs to AWS CloudWatch

The following is a Python code for sending application logs to AWS CloudWatch:


import boto3
import time
import json

client = boto3.client('logs', region_name='us-east-1', aws_access_key_id=ACCESS_KEY,
                               aws_secret_access_key=ACCESS_SECRET)

def send_log(log_group_name, log_stream_name, log_message):
    #Getting last sequence token
    response = client.describe_log_streams(logGroupName=log_group_name,
                                           logStreamNamePrefix=log_stream_name)

    log_event = {
        'logGroupName': log_group_name,
        'logStreamName': log_stream_name,
        'logEvents': [
            {
                'timestamp': int(round(time.time() * 1000)),
                'message': log_message
            },
        ],
    }

    #Adding last sequence token to log event before sending logs if it exists
    if 'uploadSequenceToken' in response['logStreams'][0]:
        log_event.update(
            {'sequenceToken': response['logStreams'][0]['uploadSequenceToken']})

    print("logs to send : ", log_event)
    response = client.put_log_events(**log_event)
    time.sleep(1)
    print("Response : ", response)

#Create log group and log stream from AWS Console and replace the name below
LOG_GROUP_NAME = "test-log-group"
LOG_STREAM_NAME = "test-log-stream"

log_message = json.dumps({"message": "This is a sample log"})

send_log(LOG_GROUP_NAME, LOG_STREAM_NAME, log_message)