- Tạo Java project (Maven hoặc Gradle)
- Setup Git repository
- Tạo
.gitignorecho Java - First commit
src/
main/
java/
com/fongfox/
Main.java
LogParser.java
LogEntry.java
LogAnalyzer.java
test/
java/
resources/
sample-logs/
README.md
- Tạo các thư mục theo cấu trúc trên
- Tạo các file Java rỗng
- Tạo file
sample.logvới ~100 dòng log4j 2.x format - Bao gồm mix của: DEBUG, INFO, WARN, ERROR, FATAL
- Có thể tự viết hoặc search "log4j sample log file"
Câu hỏi checkpoint: Bạn đã biết cách tạo Maven/Gradle project chưa? Hay cần gợi ý?
- Class này chứa data của 1 dòng log
- Xác định fields cần có (timestamp, level, thread, logger, message)
- Viết Constructor
- Viết getters
- Viết toString()
- Tìm hiểu pattern:
%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n - Viết regex cần capture: time, thread, level, logger, message
- Test regex với 1 dòng log mẫu
Câu hỏi: Bạn đã biết cách viết regex groups () chưa? Làm sao để extract data từ regex groups trong Java?
Note:
- Regex syntax:
"(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) \[([^]]+)\] (\w+)\s+(\w+) - (.*)"gm- Example:
2026-01-20 12:40:01.123 [main] INFO AppStarter - Starting OrderServiceApplication v2.4.0 on localhost
2026-01-20 12:42:45.880 [http-nio-8080-exec-4] ERROR OrderController - Unexpected error while fetching order history- Method nhận input: 1 dòng log string
- Method return: LogEntry object (hoặc null nếu parse failed)
- Handle invalid lines gracefully
- Test với valid log line
- Test với invalid log line
- Test với edge cases (empty line, malformed format)
- Dùng
Files.lines()hoặcBufferedReader - Đọc từng dòng và parse
- Lưu kết quả vào
List<LogEntry>
- Test với file lớn (tạo file 100MB+)
- Ensure không bị OutOfMemoryError
- Đo thời gian xử lý
- Handle file không tồn tại
- Quyết định: skip dòng lỗi hay stop?
- Log ra bao nhiêu dòng failed
Câu hỏi: Bạn muốn tool stop khi gặp lỗi, hay skip dòng lỗi và tiếp tục?
- Input:
List<LogEntry> - Method:
countByLevel()- đếm số lượng mỗi log level - Method:
findErrors()- filter chỉ ERROR + FATAL - Method:
getTimeRange()- earliest & latest timestamp - Brainstorm thêm methods khác (optional)
Câu hỏi: Ngoài đếm log levels, bạn muốn analyze thêm gì?
- Top 10 loggers có nhiều lỗi nhất?
- Errors theo time range (errors per hour)?
- Pattern detection (cùng 1 lỗi lặp lại nhiều lần)?
- countByLevel() returns Map<LogLevel, Long>
- findErrors() implementation
- getTimeRange() implementation
- Mỗi method return data structure phù hợp
Example: Map<LogLevel, Integer> cho countByLevel()
- Tạo test data với known results
- Verify calculations đúng
- Print analysis results ra console
- Format đẹp, dễ đọc
- Example format:
=== Log Analysis Report ===
Total lines: 1000
DEBUG: 300
INFO: 500
WARN: 150
ERROR: 45
FATAL: 5
Time range: 07:00:00.000 - 18:30:45.123
- Ghi report vào
.txtfile - Same format như console
- Serialize analysis results thành JSON
- Dùng library (Gson, Jackson) hoặc tự build JSON string
- Ghi vào
.jsonfile
Câu hỏi: Bạn đã dùng JSON library nào chưa? Muốn dùng library hay tự build?
- Parse input file path
- Parse output format (console/text/json)
- Parse options (ví dụ:
--level ERROR)
- Print help message khi user gõi sai
- Example format:
Usage: java -jar log-analyzer.jar <log-file> [options]
Options:
--output <format> Output format: console, text, json
--level <level> Filter by log level
- Remove debug code
- Consistent naming
- Add comments where needed
- Project description
- Features
- How to build & run
- Usage examples
- Sample output
- Test với different log files
- Test all features
- Fix bugs
- Review commit history
- Ensure có meaningful commit messages
- Filter by time range - Analyze logs trong khoảng thời gian cụ thể
- Search by keyword - Tìm logs chứa keyword
- Duplicate error detection - Tìm errors giống nhau
- Support multiple log formats - Thêm Apache/Nginx
- Performance benchmarking - So sánh performance với file sizes khác nhau
- Log format: Log4j 2.x
- Programming language: Java
- File reading approach: Files.lines() or BufferedReader
- Focus: Analysis over multiple format support
- Stop on error vs skip and continue?
- Which JSON library to use?
- What additional analysis features to add?
Started: [Date] Target completion: [Date] Hours spent: [Track here]
- Day 1:
- Day 2:
- ...