stack_log 1.0.0+1
stack_log: ^1.0.0+1 copied to clipboard
Parser for Google Cloud Logs with syntax highlighting
StackLog #
Table of Contents #
- 🚀 Features
- 📦 Installation
- ⚡ Quick Start
- 📁 Input Format
- 🛠️ Usage
- 📊 Output
- 🏗️ Building from Source
- 👨💻 Author
- 📜 License
- 🚧 TODO
🚀 Features #
- 📊 Google Cloud Log Processing: Parse and analyze structured JSON logs from Google Cloud Platform (GCP)
- 🎨 Syntax Highlighting: Beautiful color-coded output for enhanced log readability
- 🔄 Dual Payload Support: Handles both textPayload and jsonPayload fields with intelligent preference
- 📁 Organized Output: Automatically creates structured output directory with categorized files
📦 Installation #
Prerequisites #
- Dart SDK 3.0+ - Required to run or compile the project
Method 1: From Source (Recommended for Development) #
Clone the repository:
git clone https://github.com/LazyLazyMeat/stack-log.git
cd stack-log
Install dependencies:
dart pub get
Verify installation:
dart run bin/parser.dart --help
Method 2: Using Pre-compiled Binaries #
Will be added soon
Method 3: Global Installation (After Building) #
Will be added soon
Verifying Installation #
Test that everything is working correctly:
dart run bin/parser.dart --help
dart run bin/highlighter.dart --help
Or with compiled versions
Will be added later
Platform-Specific Notes #
Windows:
- Use Command Prompt or PowerShell
- Ensure Dart SDK is in your PATH
- Build produces .exe files
Linux:
- Works with most common distributions
- Build produces executable binaries
- May need to set execute permissions:
chmod +x build/*
⚡ Quick Start #
Step 1: Prepare raw log file #
You can find valid example of input.json in example/input.json
Step 2: Run the Parser #
- Basic usage (uses input.json in current directory):
dart run bin/parser.dart - Or specify your log file:
dart run bin/parser.dart my_logs.json - With custom output directory:
dart run bin/parser.dart --input my_logs.json --output my_results
Step 3: View the Results #
- View the default output (output/output.txt):
dart run bin/highlighter.dart - Or specify a file:
dart run bin/highlighter.dart output/output.txt
Expected Output:
- You should see color-coded logs like this:
(05.10.23 12:00:00:123) [INFO] <Mozilla/5.0...> User logged in successfully
(05.10.23 12:01:30:456) [ERROR] Database connection failed
Step 4: Explore Generated Files #
Check the output/ directory for all processed data:
ls output/
# output.txt - Formatted logs (used by highlighter)
# output.json - Structured JSON data
# json_payloads.json - Parsed JSON payloads
# errors.txt - Any processing errors
# run-log.txt - Execution log
📁 Input Format #
The parser expects logs in the standard Google Cloud Logging JSON format. The input file must be a JSON array containing log entry objects.
Basic Structure #
[
{
// Log entry 1
},
{
// Log entry 2
}
]
Supported Fields #
| Field | Type | Required | Description |
|---|---|---|---|
severity |
string | ❌ | Log level (DEBUG, INFO, WARNING, ERROR, etc.) |
timestamp |
string | ❌ | ISO 8601 |
textPayload |
string | ⚠️ | Plain text log message |
jsonPayload |
object | ⚠️ | Structured JSON log data |
httpRequest.userAgent |
string | ❌ | HTTP user agent string |
Legend: ❌ Optional, ⚠️ At least one payload required
Complete example #
Minimal valid entry:
[
{
"severity": "INFO",
"timestamp": "2025-11-01T12:00:00.000Z",
"httpRequest": {
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
},
"textPayload": "User session created for user@example.com"
},
{
"severity": "ERROR",
"timestamp": "2025-11-01T12:01:00.000Z",
"jsonPayload": {
"message": "Database connection timeout",
"errorCode": "DB_CONN_001"
}
}
]
Field Priority #
If both textPayload and jsonPayload are present, jsonPayload takes precedence. Missing fields are not included in output, invalid fields are ignored.
Filtered Messages #
The following log messages are automatically filtered out and won't appear in output files:
- Messages starting with "Starting new instance"
- Messages starting with "Default STARTUP"
- Messages starting with "Ready condition"
- Messages starting with "audit_log"
Validation #
The parser will:
- ✅ Process valid log entries
- ⚠️ Skip entries with missing required structure (with error messages)
- ❌ Stop processing if the root is not a JSON array
🛠️ Usage #
Parser #
The main parser processes Google Cloud log files and generates multiple output formats.
Basic Syntax
dart run bin/parser.dart [OPTIONS] [INPUT_FILE]
Arguments
| Argument | Description | Default |
|---|---|---|
--input |
Input JSON log file | input.json |
--output |
Output directory | output |
--help |
Show help message | - |
Examples
Basic Usage:
# Process default input.json, create output/ directory
dart run bin/parser.dart
# Process specific file
dart run bin/parser.dart my_logs.json
# Using positional argument (legacy style)
dart run bin/parser.dart logs/application.json
Advanced Usage:
# Custom input and output paths
dart run bin/parser.dart --input logs/production.json --output analysis/results
# Using short options
dart run bin/parser.dart -i cloud_logs.json -o processed_logs
# Show help
dart run bin/parser.dart --help
With Compiled Binary:
Will be added soon
Output Files
After processing, the following files are created in the output directory:
output.txt- Formatted text logs (human readable)output.json- Structured JSON datajson_payloads.json- Parsed JSON payloadserrors.txt- Processing errors with detailsrun-log.txt- Execution log and statistics
Highlighter #
Basic Syntax
dart run bin/highlighter.dart [FILE_PATH]
Arguments
| Argument | Description | Default |
|---|---|---|
FILE_PATH |
File to highlight | output/output.txt |
--help |
Show help message | - |
Examples
Basic Usage:
# Highlight default output file
dart run bin/highlighter.dart
# Highlight specific file
dart run bin/highlighter.dart output/output.txt
# Highlight custom log file
dart run bin/highlighter.dart my_formatted_logs.txt
Advanced Usage:
# Highlight file from different directory
dart run bin/highlighter.dart ../other_project/output.txt
# Show help
dart run bin/highlighter.dart --help
With Compiled Binary:
Will be added soon
Color Scheme The highlighter uses the following color scheme:
- Blue
[INFO]- Severity levels - Green
(05.10.25 12:00:00:000)- Timestamps - Red
<Mozilla/5.0...>- User agents - Default - Log message content
Integration with Other Tools #
# Pipe to grep for filtering
dart run bin/highlighter.dart output/output.txt | grep "WARNING"
# Count occurrences of specific messages
dart run bin/highlighter.dart output/output.txt | grep -c "user"
📊 Output #
The parser generates multiple output files organized in the specified output directory. Each file serves a different purpose and format for various use cases.
Output Directory Structure #
output/
├── output.txt # Formatted text logs
├── output.json # Structured JSON data
├── json_payloads.json # Parsed JSON payloads
├── errors.txt # Processing errors
└── run-log.txt # Execution log
File Details #
output.txt - Formatted Text Logs
Human-readable formatted logs with consistent structure. Format:
(TIMESTAMP) [SEVERITY] <USER_AGENT> LOG_MESSAGE
Example:
(05.10.23 12:00:00:123) [INFO] <Mozilla/5.0...> User authentication successful
(05.10.23 12:01:30:456) [ERROR] <curl/7.68.0> Database connection timeout
(05.10.23 12:02:15:789) [WARNING] <N/A> High memory usage: 85%
Features:
- Timestamps formatted as
DD.MM.YY HH:MM:SS:mmm - User agents shortened to 12 characters with ellipsis
- Consistent spacing and alignment
Ready for terminal display or logging systems
output.json - Structured JSON Data
Complete structured data preserving all original fields in a normalized format.
Format:
[
{
"Severity": "INFO",
"Agent": "APIs-Google; (+https://developers.google.cn/webmasters/APIs-Google.html)",
"Time": "05.10.23 12:00:00:123",
"log": "User authentication successful"
},
{
"Severity": "ERROR",
"Time": "05.10.23 12:01:30:456",
"log": "Database connection timeout"
}
]
Fields:
severity- Log level (INFO, ERROR, WARNING, etc.)agent- Full user agent string (not shortened)time- Formatted timestamplog- Log message content
json_payloads.json - Parsed JSON Payloads
Specialized output for logs that contain JSON payloads, with the JSON properly parsed and formatted.
Format:
[
{
"Severity": "ERROR",
"Agent": "curl/7.68.0",
"Time": "05.10.23 12:01:30:456",
"log": {
"message": "Database connection timeout",
"errorCode": "DB_CONN_001",
"details": {
"host": "db-server-1",
"port": 5432
}
}
}
]
Features:
- JSON payloads are parsed into proper objects
- Maintains original JSON structure
- Ideal for data analysis and processing
- Only includes entries with JSON payloads
errors.txt - Processing Errors
Detailed error information for log entries that couldn't be processed.
Format:
Ошибка обработки элемента с индексом 0:
Тип ошибки: FormatException
Сообщение: Invalid JSON format
Элемент: { malformed json }
Stack trace: ...
------------------------
Contains:
- Error index (position in input file)
- Error type and message
- Problematic log entry
- Stack trace for debugging
- Separators between different errors
run-log.txt - Execution Log
Comprehensive log of the parsing execution with statistics and timing.
Format:
Google Cloud Log Parser
=======================
Входной файл: input.json
Выходная директория: output
Начата обработка 150 записей...
Ошибка в элементе 42: FormatException: Invalid timestamp
✓ Текстовый результат сохранен в output/output.txt
✓ JSON результат сохранен в output/output.json
✓ Логи с JSON-подобным payload сохранены в output/json_payloads.json
Найдено 23 логов с JSON-подобным payload.
⚠ Найдено 1 ошибок. Подробности в output/errors.txt
Обработка завершена!
✓ Успешно обработано: 149 из 150 элементов
✓ Отфильтровано: 5 элементов
⚠ С ошибками: 1 элементов
Includes:
- Start and end timestamps
- Input/output file paths
- Processing statistics
- Success/failure messages
- Error summaries
🏗️ Building from Source #
Will be added soon
👨💻 Author #
Oleg Uvarov
- Email: uv.ol.al@gmail.com
- GitHub: @LazyLazyMeat
📜 License #
This project is licensed under the GNU General Public License v3.0.
See the LICENSE file for the full text.
What this means: #
- ✅ You can use, modify, and distribute this software
- ✅ You can use this in personal projects
- 📝 If you modify and distribute this software, you must:
- Make the source code available under GPL v3
- Include the original copyright notice
- State the changes you made
🚧 TO-DO #
- Add scripts for copying binaries to system bin directory or adding to PATH for Linux
- Develop equivalent solution for Windows
- Upload compiled binaries to GitHub releases
- Consider adding macOS support
- Translate all strings in source code to English
- Consider localization implementation
- Create Russian-language README
- Move configuration to separate config file
- Rename execution log to run.log (possibly move to logs folder and use timestamps for naming)