Modern, high-performance web system for real-time log file monitoring with automatic tag detection, multiple folder support, and optimizations for large data volumes.
- Real-time Monitoring: Auto-updates every 2 seconds.
- Multi-language Support: 🇬🇧 English, 🇪🇸 Spanish, 🇮🇹 Italian, 🇵🇹 Portuguese.
- Auto-Discovery: Automatically detects log files in configured folders.
-
Start the server:
python server.py
-
Open in browser:
http://localhost:8080/index.html
Real-time log monitoring with dynamic tabs, filtering, and search capabilities.
Switch between different log types using the dynamic tab system.
If you need to host the frontend on a different server than the backend (API), you can configure the server URL in the config.js file:
window.AppConfig = {
// Example: 'http://localhost:8080'
serverUrl: '' // Leave empty if frontend and backend are on the same server
};Edit the config.json file to customize the monitor's behavior.
{
"logPatterns": [
{
"pattern": "*.*.*.log",
"description": "Pattern: NAME.NUMBER.TAG.log",
"regex": "^(.+?)\\.(\\d+)\\.(.+?)\\.log$",
"tagGroup": 3,
"nameGroup": 1
}
],
"scanPaths": [
"."
],
"port": 8080,
"updateInterval": 2000,
"maxEntriesPerTag": 500,
"maxFileReadSize": 524288,
"enableVirtualScroll": true,
"autoScroll": true,
"theme": "dark"
}You can host the frontend and backend on different servers. For example:
Server A (Backend - Log API):
- Edit
config.jsonand set the desired port:{ "port": 9000, ... } - Run the server:
python server.py
- The API server will be at:
http://server-a.com:9000
Server B (Frontend - Web Interface):
-
Copy the frontend files to your web server (Apache, Nginx, IIS, etc.):
index.htmlconfig.jsapp.jsdatetime-filter.jsperformance.jsstyles.cssdatetime-filter.css
-
Edit
config.jsto point to the backend:window.AppConfig = { serverUrl: 'http://server-a.com:9000' };
-
Access the interface:
http://server-b.com/index.html
Note about CORS: If you receive CORS errors, make sure the backend server (
server.py) is properly configured to allow requests from the frontend domain. The Python server already includes CORS headers by default.
Defines the file name patterns to search for.
pattern: Simple glob pattern for visual reference.regex: Regular expression to extract information from the filename.tagGroup: Capture group number containing the TAG (used for tab grouping).nameGroup: Capture group number containing the NAME.
List of paths where to search for log files. You can specify multiple folders using relative or absolute paths.
Windows Examples:
"scanPaths": [
".", // Current folder
"../other-logs", // Relative folder
"C:/logs/application", // Absolute path
"D:/projects/my-app/logs", // Another drive
"//remote-server/logs/production" // Network shared folder
]Linux Examples:
"scanPaths": [
".", // Current folder
"../logs", // Relative folder
"/var/log/myapp", // Absolute path
"/home/user/projects/app/logs", // User path
"/mnt/storage/logs" // Mounted drive
]
⚠️ Important: Avoid duplicate paths (e.g.,.and../LogMonitorif they point to the same location) to prevent duplicate logs in the interface.
Port on which the backend server will listen (default: 8080).
- Useful when you need to run multiple monitor instances or avoid port conflicts.
Update interval in milliseconds (default: 2000 = 2 seconds).
Enable auto-scroll automatically on load (default: true).
To efficiently handle thousands of records:
Maximum number of log entries to keep in memory per tag (Recommended: 500). This prevents the browser from consuming too much RAM.
Maximum size in bytes to read from the end of the file (Recommended: 524288 = 512KB). Allows instant loading of giant log files (GBs) by reading only the most recent part.
Enables virtual rendering of the log list. Essential for maintaining interface smoothness when there are many logs.
- Dynamic Tabs: A tab is automatically created for each unique TAG found.
- Auto-discovery: If you add a new log file while the monitor is running, a new tab will appear automatically in about 10 seconds (without restarting).
- Search Box: Type text to filter logs in real-time (with 100ms debounce).
- Levels: Click the
INFO,ERROR,DEBUG, etc. buttons to show only those levels. - Date/Time Filter:
- Select start date/time in "From".
- Select end date/time in "To".
- Use the ✕ button to quickly clear the filter.
- 🗑️ Clear: Visually clears current logs (they will reload if you refresh).
- ⏸️ Pause: Stops automatic updates.
- 📜 Auto-scroll: Enables/disables automatic scrolling to the end.
YYYY-MM-DD HH:MM:SS:mmm [TID XXXXX][LEVEL ] Message [tag]
Example:
2025-11-25 17:22:04:997 [TID 25512][INFO ] Application started [dmvcframework]
- GET
/api/logs: List of discovered files. - GET
/api/config: Current configuration. - GET
/api/refresh: Forces file re-scanning.
If you see double the expected logs, check scanPaths in config.json. Make sure you're not scanning the same folder from two different paths (e.g., . and ../logs).
Auto-discovery runs every 10 seconds. Wait a moment. If they don't appear, verify that the filename matches logPatterns.
Make sure you have "enableVirtualScroll": true and "maxEntriesPerTag": 500 enabled in config.json.

