Chapter 1: Nơi mọi thứ bắt đầu
1. Tại sao cần log
-
Troubleshooting và Debugging: Khi ứng dụng của bạn gặp sự cố, log là nơi đầu tiên cần kiểm tra. Chúng cung cấp một bản ghi theo trình tự thời gian về các sự kiện dẫn đến lỗi, giúp dễ dàng xác định nguyên nhân gốc. Hãy tưởng tượng một chương trình phức tạp hoạt động không chính xác. Log có thể tiết lộ những phần nào của code được thực thi chính xác và nơi nào xảy ra sự cố, giúp developer tiết kiệm đáng kể thời gian và tránh bực bội.
-
Performace Monitoring: Log có thể theo dõi hiệu suất của hệ thống bạn. Bạn có thể xác định các process chạy chậm, tình trạng thiếu tài nguyên và những phần cần tối ưu hóa. Bằng cách phân tích log, bạn có thể xem một số tác vụ nhất định mất bao lâu để hoàn thành và liệu có bất kỳ sự cố hiệu suất lặp lại nào ảnh hưởng đến trải nghiệm tổng thể của người dùng không.
-
Security Auditing: Nhật ký sự kiện (log) cung cấp bản ghi chi tiết về hoạt động người dùng và sự kiện hệ thống, đóng vai trò quan trọng trong bảo mật. Bạn có thể giám sát các lần đăng nhập, truy cập trái phép và các vi phạm bảo mật tiềm ẩn. Trong trường hợp xảy ra sự cố bảo mật, log có thể được sử dụng để theo dõi các hoạt động của kẻ tấn công và hiểu rõ cách thức vi phạm xảy ra, hỗ trợ cho việc ngăn chặn trong tương lai.
-
Compliance: Nhiều ngành công nghiệp có các quy định yêu cầu lưu giữ chi tiết các hoạt động của người dùng và hoạt động của hệ thống. Logging giúp đảm bảo tuân thủ các quy định này bằng cách cung cấp a verifiable audit trail - một bản kiểm toán theo dõi có thể xác minh được. Điều này đặc biệt quan trọng đối với các lĩnh vực như tài chính hoặc chăm sóc sức khỏe, nơi tính bảo mật và an toàn dữ liệu là tối quan trọng. Ví dụ như PCI DSS Logging and Monitoring Requirements. Nếu bạn không có thông tin chi tiết về việc dữ liệu của bạn được truy cập, cập nhật hoặc xóa vào thời gian nào, bạn sẽ không thể phát hiện ra các cuộc tấn công vào hệ thống của mình. Ngoài ra, bạn sẽ có thông tin hạn chế để điều tra, đặc biệt là nếu có sự cố xảy ra sau khi dữ liệu bị rò rỉ.
-
Business Intelligence: Log là một nguồn dữ liệu quý giá để hiểu được hành vi của người dùng và cách sử dụng ứng dụng. Bằng cách phân tích log, doanh nghiệp có thể thu thập được thông tin chi tiết về cách người dùng tương tác với hệ thống của họ, từ đó xác định các lĩnh vực cần cải thiện và cá nhân hóa trải nghiệm của người dùng.
2. Những logging frameworks dành cho Java
2.1 java.util.logging (JUL)
Được bao gồm luôn trong JDK từ phiên bản 1.4, nó cung cấp một số thứ như log level (NFO, WARNING, SEVERE, eg, ...), loggers, handlers and formatters. Và cơ bản thì không bao giờ là đủ đó là lí do tại sao mà xuất hiện các framework như ở dưới. Ưu điểm
- Không cần thêm bất cứ lib nào bởi đã bao gồm trong JDK.
- Nhẹ.
- Tài liệu đầy đủ và được support.
- Khá dễ trong việc sử dụng.
Nhược điểm
- Không có một số tính năng cao cấp như các thư viện logging khác: synchronous logging hoặc advanced filters.
- Hiệu năng không cao.
2.2 Log4j
Log4j là một trong những framework ghi log phổ biến nhất trong hệ sinh thái Java. Nó cung cấp một bộ tính năng phong phú bao gồm các logger level, nhiều điểm đích đầu ra (appenders), định dạng log có thể tùy chỉnh (format), bộ lọc (filter) và các mức độ ghi log. Log4j có thể cấu hình một cách linh hoạt thông qua các tệp cấu hình XML hoặc properties. Nó cung cấp hiệu suất và khả năng mở rộng tốt hơn so với JUL. Tuy nhiên dự án này hiện nay đã không còn được maintain và có một lỗi bảo mật nghiêm trọng chính vì vậy nên nâng cấp lên log4j2 hoặc sử dụng các logging framework khác.
2.3 Logback
Logback được phát triển bởi cùng một nhóm phía sau Log4j và được dự định là người kế nhiệm của nó. Nó cung cấp nhiều tính năng tương tự như Log4j nhưng với hiệu suất cải thiện và một số tính năng bổ sung. Logback có thể cấu hình một cách linh hoạt thông qua các tệp cấu hình XML hoặc Groovy. Nó hỗ trợ SLF4J (Simple Logging Facade for Java), cho phép các nhà phát triển viết mã độc lập với việc triển khai logging đã chọn.
Ưu điểm
- Nó rất nhanh và hiệu quả.
- Đã được test nhằm đảm bảo sự tin cậy và ổn định.
- Có khả năng customize cao.
- Có tài liệu rõ ràng và cộng đồng support lớn.
Nhược điểm
- Tốn nhiều tài nguyên khi logging cao tải.
- Việc tìm hiểu để sử dụng có thể mất thời gian.
2.4 SLF4J (Simple Logging Facade for Java)
SLF4J không phải là một framework ghi log mà nó đóng vai trò như một facade hoặc lớp trừu tượng cho các framework ghi log khác nhau. Nó cho phép developer code bằng API của SLF4J trong khi chọn triển khai ghi log thực tế vào thời gian chạy. SLF4J hỗ trợ kết nối với các framework ghi log khác nhau bao gồm Log4j, Logback, JUL và các framework khác. Lấy 1 ví dụ đơn giản: Nếu bạn đang phát triển 1 ứng dụng sử dụng logging framework là JUL tuy nhiên bạn cần 1 số thư viện từ bên ngoài và những thư viện này giả dụ lại sử dụng một logging framework khác là log4j. Điều này dẫn tới ứng dụng của bạn có một hệ thống log không đồng nhất. Thì để giải quyết bài toán này SLF4J ra đời, khi đó lib của của các developer khác sẽ sử dụng API của SLF4J và khi được thêm vào ứng ụng của bạn, các thư viện này sẽ sử dụng logging framework mà bạn đang sử dụng.
Ưu điểm
- Chuyển đổi linh hoạt giữa các logging frameworks mà không ảnh hưởng đến source code.
- Tương thích với nhiều giải pháp logging khác nhau.
- Có migration tool.
Nhược điểm
- Nó không hoàn toàn cung cấp một giải pháp log cụ thể bởi nó chỉ là một facade.
2.5 Log4j 2
Apache Log4j là một framework ghi log Java đa năng, đạt chuẩn công nghiệp, được cấu thành từ các API, phần triển khai của nó và các thành phần hỗ trợ việc triển khai cho nhiều trường hợp sử dụng khác nhau. Log4j được sử dụng bởi 8% hệ sinh thái Maven và được liệt kê là một trong 100 dự án phần mềm mã nguồn mở quan trọng hàng đầu. Dự án này được bảo trì tích cực bởi một nhóm tình nguyện viên và được hỗ trợ bởi một cộng đồng lớn. Ưu điểm
- Sở hữu một hệ sinh thái plugin phong phú, giúp mở rộng khả năng.
- Có thể sử dụng ở các ngôn ngữ khác Python, Ruby, C#, or C++.
- Hiệu suất cao.
- Không bị phụ thuộc vào nhà cung cấp.
Nhược điểm
- Việc cấu hình chi tiết cho các trường hợp sử dụng nâng cao có thể phức tạp và yêu cầu hiểu biết sâu về thư viện.
- Do tính năng phong phú, việc nắm vững tất cả các chức năng có thể mất nhiều thời gian để học hỏi và thực hành.
2.6 Apache Commons Logging
Tương tự như SLF4J, apache commons logging không thật sự là một logging framework mà thay vào đó nó cho phép chúng ta sử dụng các API để log và tại thời gian chạy thì nó sẽ sử dụng framework thật sự để log ra các message. Có thể tìm đọc thêm về facade pattern
2.7 Tinylog
Tinylog là một open-source logging framework dành cho Java, được giới thiệu vào năm 2012 để đơn giản hóa việc ghi nhật ký với API dễ hiểu và cấu hình. Không giống như các thư viện ghi nhật ký khác, nó nhẹ và nhỏ, với kích thước JAR kết hợp chỉ 187 KB.
Ưu điểm
- Tối ưu cho tốc độ; tham khảo benchmarks ở đây https://tinylog.org/v2/benchmark/
- Nhẹ
- Cấu hình đơn giản
Nhược điểm
- Các cấu hình thì hạn chế hơn so với Logback hoặc SLF4J.
- Cộng đồng hỗ trợ không lớn.
3. Recommanded logging strategy
- Nên sử dụng SLF4J để có thể dễ dàng thay đổi các logging framework.
- Đối với logging thì nên chọn logback hoặc log4j2.
- Không nên sử dụng log4j vì dự án này không được maintain nữa và có lỗi liên quan đến bảo mật nghiêm trọng.
- Đối với log4j2 thì sẽ có một vài tính năng tốt hơn so với các đối thủ như Lazy Loading Messages, Async Loggin.
Links tham khảo:
All rights reserved