Creating a Custom Log Generator Helper Class in Python

0

Creating a Custom Log Generator Helper Class in Python

Logging is an essential aspect of any application, providing insights into the application's behavior, aiding in debugging, and monitoring system health. While Python’s built-in logging module is versatile, there are scenarios where a custom log generator can provide additional flexibility. In this post, we will create a custom log generator helper class in Python to streamline and enhance your logging process.

Why Custom Logging?

A custom log generator can offer several benefits:

  • Simplify configuration and setup.
  • Standardize log formats and file naming.
  • Automatically handle log rotation based on file size.
  • Make it easy to include additional context in logs.

Building the Custom Log Generator Helper Class

Step 1: Import Required Modules

import os
import datetime

Step 2: Define the CustomLogGenerator Class

class CustomLogGenerator:
    def __init__(self, log_folder, file_prefix, max_file_size=1e6):
        self.log_folder = log_folder
        self.file_prefix = file_prefix
        self.max_file_size = max_file_size  # in bytes

        # Create log folder if it doesn't exist
        if not os.path.exists(self.log_folder):
            os.makedirs(self.log_folder)

    def _get_filename(self, date_str, file_number=None):
        if file_number:
            return f"{self.log_folder}/{self.file_prefix}{date_str}_{file_number}.log"
        else:
            return f"{self.log_folder}/{self.file_prefix}{date_str}.log"

    def _get_next_file_number(self, date_str):
        i = 1
        while True:
            log_file = self._get_filename(date_str, i)
            if not os.path.exists(log_file):
                return i
            i += 1

    def generate_log(self, message):
        date_str = datetime.datetime.now().strftime("%d%m%Y")
        log_file = self._get_filename(date_str)
        next_file_number = 1

        # Check if the log file exists and its size is more than the max_file_size
        if os.path.exists(log_file) and os.path.getsize(log_file) > self.max_file_size:
            while True:
                log_file = self._get_filename(date_str, next_file_number)
                if not os.path.exists(log_file) or os.path.getsize(log_file) <= self.max_file_size:
                    break
                next_file_number += 1

        # Write the log message to the log file
        with open(log_file, 'a') as f:
            timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
            f.write(f"{timestamp} - {message}\n")

Step 3: Using the Custom Log Generator

# Initialize the log generator
log_generator = CustomLogGenerator(log_folder='logs', file_prefix='app_log_', max_file_size=1e6)

# Generate some log messages
log_generator.generate_log('This is the first log message.')
log_generator.generate_log('This is the second log message.')
log_generator.generate_log('Another log message with more details.')

Conclusion

By creating a custom log generator helper class, you can streamline your logging process, ensure consistent log formatting, and handle log file rotation automatically. This class provides a flexible foundation for enhancing your application's logging capabilities.

Feel free to modify and extend this class to suit your specific needs. Happy logging!

Tags:

Post a Comment

0Comments

Post a Comment (0)