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).
logging.FileHandler(filename, mode='a', encoding=None, delay=False)
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).
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
.
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!")
✅ 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