How to Configure DeepWiki Logging: Setting LOG_LEVEL and LOG_FILE_PATH
Configure DeepWiki logging by setting the LOG_LEVEL and LOG_FILE_PATH environment variables before starting the application, which controls minimum severity and output destination via the setup_logging() function in api/logging_config.py.
DeepWiki, an open-source project by AsyncFuncAI, centralizes its logging configuration through environment variables to ensure flexible deployment across development and production environments. Understanding how to configure DeepWiki logging allows you to control verbosity, file rotation, and output destinations without modifying source code.
Understanding DeepWiki's Logging Architecture
Core Logging Module
All logging functionality resides in api/logging_config.py. The setup_logging() function executes automatically when any public API module (such as api/main.py, api/simple_chat.py, or api/websocket_wiki.py) imports it. This ensures the logging infrastructure is ready before any business logic executes.
The function performs three critical operations:
- Creates a trusted log directory at
api/logs/relative to the source file - Validates environment variables for security and correctness
- Configures dual handlers: a
RotatingFileHandlerfor persistent storage and a console handler for real-time monitoring
Environment Variable Overview
DeepWiki recognizes four environment variables for logging configuration:
| Variable | Purpose | Default Value |
|---|---|---|
LOG_LEVEL |
Minimum severity to emit (DEBUG, INFO, WARNING, ERROR, CRITICAL) |
INFO |
LOG_FILE_PATH |
Absolute or relative path for log output (must resolve inside logs/ directory) |
api/logs/application.log |
LOG_MAX_SIZE |
Maximum file size in MiB before rotation triggers | 10 |
LOG_BACKUP_COUNT |
Number of archived log files to retain | 5 |
Configuring LOG_LEVEL for DeepWiki
The LOG_LEVEL environment variable accepts standard Python logging level names. The implementation normalizes input using .upper(), making the configuration case-insensitive. If you provide an invalid level name, the system gracefully falls back to INFO.
Set the level based on your operational needs:
DEBUG: Verbose output including function entry points and variable states (development only)INFO: Standard operational messages (recommended for production)WARNING: Only unexpected conditions that don't prevent operationERROR: Runtime failures that prevent specific operationsCRITICAL: System-wide failures requiring immediate attention
export LOG_LEVEL=DEBUG
python -m api.main
Setting LOG_FILE_PATH and Rotation Settings
Path Security and Validation
DeepWiki implements path-traversal protection by validating that LOG_FILE_PATH resolves within the trusted api/logs/ directory. You may specify subdirectories (e.g., logs/production/app.log), but attempts to escape the logs folder (e.g., ../../../etc/passwd) will be blocked by the security check in api/logging_config.py.
Log Rotation Configuration
The system uses Python's logging.handlers.RotatingFileHandler to manage disk space automatically. When the current log file exceeds LOG_MAX_SIZE MiB, the handler:
- Renames the current file by appending
.1 - Shifts existing backups (
.1becomes.2, etc.) - Creates a fresh log file
- Deletes the oldest backup if exceeding
LOG_BACKUP_COUNT
export LOG_FILE_PATH=logs/production/api.log
export LOG_MAX_SIZE=50
export LOG_BACKUP_COUNT=10
python -m api.main
Practical Configuration Examples
Shell Environment Configuration
For immediate testing or containerized deployments, export variables before launching the application:
export LOG_LEVEL=DEBUG
export LOG_FILE_PATH=logs/debug_session.log
export LOG_MAX_SIZE=20
export LOG_BACKUP_COUNT=3
python -m api.main
Using a .env File
For persistent configuration across restarts, create a .env file in the project root:
LOG_LEVEL=WARNING
LOG_FILE_PATH=logs/errors_only.log
LOG_MAX_SIZE=5
LOG_BACKUP_COUNT=3
When the application starts via docker-compose or a process manager that loads environment files, DeepWiki will automatically apply these settings to the setup_logging() function.
Customizing Log Format Programmatically
For specialized debugging sessions, override the default format before importing other application modules:
from api.logging_config import setup_logging
custom_format = "%(asctime)s | %(levelname)s | %(module)s:%(lineno)d | %(message)s"
setup_logging(format=custom_format)
# Import application modules after logging is configured
import api.main
Summary
- DeepWiki logging is controlled through environment variables read by
api/logging_config.pyat application startup. - Set
LOG_LEVELto control verbosity using standard Python levels (DEBUG,INFO,WARNING,ERROR,CRITICAL). - Configure
LOG_FILE_PATHto customize output location, with automatic validation preventing directory traversal outsideapi/logs/. - Rotation settings (
LOG_MAX_SIZEandLOG_BACKUP_COUNT) manage disk usage automatically usingRotatingFileHandler. - Apply changes by setting environment variables before launching the process via shell exports,
.envfiles, or container configuration.
Frequently Asked Questions
How do I enable debug logging in DeepWiki?
Set the LOG_LEVEL environment variable to DEBUG before starting the application. This will emit verbose messages including function entry points and internal state information. For example: export LOG_LEVEL=DEBUG && python -m api.main. The change takes effect immediately on the next startup because setup_logging() in api/logging_config.py reads this variable at import time.
Can I write logs to a location outside the api/logs directory?
No. DeepWiki implements a security check in api/logging_config.py that validates LOG_FILE_PATH resolves within the trusted api/logs/ directory. This prevents path traversal attacks. You may create subdirectories within api/logs/ (e.g., logs/production/app.log), but attempting to use paths like ../../../var/log/app.log will be blocked by the validation logic.
What happens when the log file reaches the maximum size?
When the log file exceeds the size specified by LOG_MAX_SIZE (default 10 MiB), DeepWiki's RotatingFileHandler automatically rotates the file. The current file is renamed with a .1 extension, existing backups are shifted (.1 becomes .2, etc.), and a fresh log file is created. If the number of backups exceeds LOG_BACKUP_COUNT (default 5), the oldest archive is deleted to manage disk space automatically.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →