Some text some message..
Back 📂 FileHandler in Python Logging 18 Aug, 2025

🌟 What is FileHandler?

  • A handler is a component in logging that decides where the log messages go.

  • FileHandler is a built-in logging handler that writes log messages into a file.

  • Unlike basicConfig(filename="..."), FileHandler gives more flexibility (e.g., multiple files, different log levels per file).


🔑 Syntax

logging.FileHandler(filename, mode='a', encoding=None, delay=False)

Parameters:

  • filename → File name or path where logs are saved.

  • mode → File opening mode:

    • 'a' (append, default) → keeps old logs and adds new ones

    • 'w' (write) → overwrites file each time

  • encoding → File encoding ('utf-8' recommended).

  • delay → If True, file is opened only when first log message is emitted (lazy loading).


🔎 Example: Using FileHandler

import logging

# Create logger
logger = logging.getLogger("my_logger")
logger.setLevel(logging.DEBUG)

# Create FileHandler
file_handler = logging.FileHandler("app.log", mode='a', encoding="utf-8")
file_handler.setLevel(logging.ERROR)  # only errors and above go to file

# Create formatter
formatter = logging.Formatter("%(asctime)s | %(levelname)s | %(message)s")
file_handler.setFormatter(formatter)

# Add handler to logger
logger.addHandler(file_handler)

# Example logs
logger.debug("This won't go to file (below ERROR level)")
logger.error("This will be logged into app.log")
logger.critical("Critical issue logged too")

➡️ Only ERROR and CRITICAL logs are written to app.log.


⚡ Multiple Handlers Example

You can combine console logging with file logging:

import logging

logger = logging.getLogger("multi_logger")
logger.setLevel(logging.DEBUG)

# Console handler
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)

# File handler
file_handler = logging.FileHandler("debug.log")
file_handler.setLevel(logging.DEBUG)

# Formatter
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)

# Add both handlers
logger.addHandler(console_handler)
logger.addHandler(file_handler)

# Logs
logger.info("This goes to both console and file!")

📊 Why use FileHandler?

✅ Keep permanent records of logs for debugging later
✅ Useful for production apps (instead of losing logs after execution)
✅ Can separate logs by severity (errors in one file, debug in another)
✅ Works with RotatingFileHandler to avoid huge files