Tuesday, February 11, 2025
HomeProgrammingHow To Create A Actual-Time Error Notification App with Python

How To Create A Actual-Time Error Notification App with Python


Have you ever ever needed to remain up to date about vital occasions or errors with out continuously checking logs?

On this tutorial, I’ll present you find out how to construct a Python program that displays log information in actual time and notifies you by way of e mail when particular occasions happen. By the tip of this information, you’ll have a sensible instrument that watches for points and sends you alerts instantly.

This challenge is beginner-friendly and demonstrates find out how to use Python libraries for file monitoring and e mail automation. Let’s get began!

Why Construct an Error Monitoring System?

A log monitoring system is a superb Python challenge to enhance your abilities whereas fixing real-world issues. Right here’s what you’ll study:

– Utilizing the watchdog library to watch file adjustments.
– Leveraging smtplib to ship e mail notifications.
– Customizing occasion dealing with by overriding strategies in an OOP class.

The very best half? This challenge is sensible for system directors, builders, or anybody who wants to watch logs for errors or vital occasions in real-time.

That is additionally an effective way to spice up your portfolio with a challenge that has sensible relevance in actual Python roles.

Let’s dive in!

Venture Stipulations

Earlier than we start coding, let’s evaluation the talents and instruments wanted for this tutorial.

Don’t fear should you’re not a Python knowledgeable simply but! Having a number of fundamentals below your belt will make this journey smoother and extra fulfilling.

Fundamental Python Information

You ought to be accustomed to:

– Variables, features, and loops.
– Fundamental file dealing with and exception dealing with.

Required Libraries

We’ll use the next Python libraries:

watchdog for real-time file monitoring.
smtplib for sending emails.

For those who do not have already got watchdog put in, simply run this command:

pip set up watchdog

A Curious and Experimental Thoughts

To my thoughts, experimenting and making small changes is among the keys to studying coding. So, be able to discover and debug as you go alongside!

Step 1: Set Up Your Venture

Earlier than we begin coding, let’s arrange the challenge:

1. Be certain Python is put in in your laptop. If not, obtain it from the official Python web site.
2. Open your favourite code editor or IDE.
3. Create a brand new Python file, for instance, log_monitor.py.

Step 2: Import Required Libraries

Let’s start by importing the libraries we’ll use on this challenge:

import time
from watchdog.observers import Observer
from watchdog.occasions import FileSystemEventHandler
import smtplib
from e mail.mime.textual content import MIMEText
from e mail.mime.multipart import MIMEMultipart

Rationalization:

watchdog gives instruments to watch file adjustments.
smtplib and e mail libraries assist ship e mail notifications.

Step 3: Create the E-mail Notification System

Subsequent, we’ll outline a perform to ship e mail alerts when particular occasions happen:

# E-mail Configuration
SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 587
EMAIL_ADDRESS = "your_email@gmail.com"
EMAIL_PASSWORD = "your_password"
RECIPIENT_EMAIL = "recipient_email@gmail.com"

def send_email(topic, physique):
    strive:
        msg = MIMEMultipart()
        msg['From'] = EMAIL_ADDRESS
        msg['To'] = RECIPIENT_EMAIL
        msg['Subject'] = topic
        msg.connect(MIMEText(physique, 'plain'))

        server = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
        server.starttls()
        server.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
        server.send_message(msg)
        server.stop()
        print(f"E-mail despatched: {topic}")
    besides Exception as e:
        print(f"Didn't ship e mail: {e}")

For this app, I’ve opted to make use of Gmail as the e-mail consumer, however after all, be at liberty to make use of whichever you favor.

That mentioned, if you wish to observe together with me and use Gmail, it’s essential to full some extra steps to allow your Python app to entry your Gmail account.

  • Log in along with your Google account, and head to your Google account web page at https://myaccount.google.com
  • Click on on the ‘Safety’ possibility within the left-hand menu
  • Click on on ‘2-Step verification’
  • Allow ‘2-Step verification’ with whichever methodology you favor
  • Keep inside the ‘2-Step verification’ web page and scroll right down to ‘App passwords’
  • Click on on ‘App Passwords’
  • Enter a reputation in your app – this might be ‘Automated Error Log Notifier’
  • Click on on ‘Create’ then save this password

Now you can use this app password as the worth in your EMAIL_PASSWORD variable to entry your Gmail account with no bother!

Key Factors:
– Guarantee you have got arrange an app password for Gmail utilizing the steps supplied.
– Change the placeholders along with your Gmail credentials. 

Step 4: Monitor the Log File

We’ll create a category that inherits from FileSystemEventHandler to watch file adjustments and detect particular occasions.

class LogFileHandler(FileSystemEventHandler):
    def __init__(self, key phrases, file_path):
        self.key phrases = key phrases
        self.file_path = file_path

    def on_modified(self, occasion):
        if occasion.src_path == self.file_path:
            with open(self.file_path, 'r') as file:
                strains = file.readlines()
                for line in strains[-10:]:  # Examine solely the final 10 strains
                    for key phrase in self.key phrases:
                        if key phrase in line:
                            topic = f"Alert: {key phrase} detected"
                            physique = f"Key phrase '{key phrase}' detected in log:nn{line}"
                            send_email(topic, physique)

How This Works:
– The LogFileHandler class inherits from FileSystemEventHandler.
– We override the on_modified methodology to specify actions when the monitored file adjustments.
– This system checks the final 10 strains of the log file for particular key phrases.

Step 5: Run the Monitoring Program

Lastly, we’ll arrange the principle perform to initialize the observer and begin monitoring:

if __name__ == "__main__":
    path_to_watch = "mylog.log"  # Change along with your log file
    keywords_to_watch = ["ERROR", "CRITICAL", "500 Internal Server Error"]

    event_handler = LogFileHandler(keywords_to_watch, path_to_watch)
    observer = Observer()
    observer.schedule(event_handler, path=path_to_watch, recursive=False)

    print("Monitoring began...")
    observer.begin()
    strive:
        whereas True:
            time.sleep(1)
    besides KeyboardInterrupt:
        observer.cease()
    observer.be a part of()

Key Factors:
– The observer watches the log file for modifications.
– When the log file adjustments, the on_modified methodology in LogFileHandler is triggered.

Full Program Supply Code

Right here’s the entire supply code for the Log Monitoring and Notification System:

'''
Hackr.io Python Tutorial: Log Notification System
'''
import time
from watchdog.observers import Observer
from watchdog.occasions import FileSystemEventHandler
import smtplib
from e mail.mime.textual content import MIMEText
from e mail.mime.multipart import MIMEMultipart

# E-mail Configuration
SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 587
EMAIL_ADDRESS = "your_email@gmail.com"
EMAIL_PASSWORD = "your_password"
RECIPIENT_EMAIL = "recipient_email@gmail.com"
EMAIL_ADDRESS = "hackrvktesting@gmail.com"
EMAIL_PASSWORD = "clggpavydrnlsxsv"
RECIPIENT_EMAIL = "robert@venturekite.com"


# Operate to ship e mail


def send_email(topic, physique):
    strive:
        msg = MIMEMultipart()
        msg['From'] = EMAIL_ADDRESS
        msg['To'] = RECIPIENT_EMAIL
        msg['Subject'] = topic
        msg.connect(MIMEText(physique, 'plain'))

        server = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
        server.starttls()
        server.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
        server.send_message(msg)
        server.stop()
        print(f"E-mail despatched: {topic}")
    besides Exception as e:
        print(f"Didn't ship e mail: {e}")

# Outline Occasion Handler


class LogFileHandler(FileSystemEventHandler):
    def __init__(self, key phrases, file_path):
        self.key phrases = key phrases
        self.file_path = file_path

    def on_modified(self, occasion):
        if occasion.src_path == self.file_path:
            with open(self.file_path, 'r') as file:
                strains = file.readlines()
                for line in strains[-10:]:  # Examine solely the final 10 strains for effectivity
                    for key phrase in self.key phrases:
                        if key phrase in line:
                            topic = f"Alert: {key phrase} detected"
                            physique = f"Key phrase '{key phrase}' detected in log:nn{line}"
                            send_email(topic, physique)


# Fundamental Operate
if __name__ == "__main__":
    path_to_watch = "logs/mylog.log"  # Change along with your log file
    keywords_to_watch = ["ERROR", "CRITICAL", "500 Internal Server Error"]

    event_handler = LogFileHandler(keywords_to_watch, path_to_watch)
    observer = Observer()
    observer.schedule(event_handler, path=path_to_watch, recursive=False)

    print("Monitoring began...")
    observer.begin()
    strive:
        whereas True:
            time.sleep(1)
    besides KeyboardInterrupt:
        observer.cease()
    observer.be a part of()

Wrapping Up

Congratulations! You’ve simply constructed a Python log monitoring and notification system. This program demonstrates how Python can automate real-world duties utilizing libraries like watchdog and smtplib.

Be at liberty to increase this challenge by:

– Monitoring a number of information.
– Including assist for SMS or Slack notifications.
– Logging detected occasions for future evaluation.

Blissful coding!



RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments