EzyPlatform quản lý log thế nào?
Back To BlogsGhi riêng log của từng thành phần
EzyPlatform không ghi toàn bộ log vào một tập tin duy nhất mà tách ra thành từng tập tin riêng tương ứng với admin, web và socket:
Điều này để tránh bị xung đột giữa các luồng ghi tập tin log, giúp thông tin được ghi chính xác, tập tin log cũng nhỏ hơn và một phần nào đó cũng giúp cho tốc độ ghi log nhanh hơn.
Mỗi một thành phần lại sử dụng riêng tập tin logback.xml của mình để có khả năng cấu hình khác nhau khi cần thiết.
Cấu hình tập tin logback.xml
EzyPlatform sử dụng logback, chính vì vậy mà tập tin cấu hình có tên là logback.xml. Ví dụ cấu hình của admin sẽ như sau:
<configuration> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} %msg%n </pattern> </encoder> </appender> <appender name="fileRolling" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logs/admin-server.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>logs/admin-server.log.%d{yyyy-MM-dd}</fileNamePattern> </rollingPolicy> <encoder> <pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} %msg%n </pattern> </encoder> </appender> <appender name="file" class="ch.qos.logback.classic.AsyncAppender"> <appender-ref ref="fileRolling" /> </appender> <appender name="composite" class="org.youngmonkeys.ezyplatform.logback.CompositeLogbackAppender" /> <root level="info"> <appender-ref ref="console"/> <appender-ref ref="file"/> <appender-ref ref="composite"/> </root> </configuration>
Ở đây chúng ta có:
- Định dạng của một dòng log sẽ là:
%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} %msg%n
. - Log ban đầu sẽ được lưu ở một tập tin
logs/admin-server.log
, tuy nhiên sau 1 ngày thì sẽ được tạo thành tập tin mới tương ứng với ngày đó. - Level log mặc định là
info
, nghĩa là những log từdebug
trở lại sẽ không được ghi. - Log không được xoá định kỳ, nếu bạn muốn định kỳ xoá log bạn có thể cài đặt Log Monitor plugin.
Lớp CompositeLogbackAppender
Như bạn có thể thấy trong tập tin logback.xml, đây là một lớp được phát triển bởi EzyPlatform, không phải mặc định của sẵn của logback, mã nguồn của nó chỉ đơn giản thế này:
public class CompositeLogbackAppender extends LogbackAppender { @Override protected void append(ILoggingEvent event) { LogbackAppenderManager .getInstance() .forEach(it -> it.doAppend(event)); } }
Nó sẽ gọi đến các lớp Appender
được cài đặt bởi cả EzyPlatform lẫn các plugin để cho phép can thiệp vào quá trình log, ví dụ để gửi log WARN
, ERROR
vào hệ thống giám sát chẳng hạn.
Tổng kết lại
EzyPlatform quản lý log tương đối đơn giản nhưng đủ để các nhà phát triển yên tâm sử dụng. EzyPlatform cũng không quá ôm đồm nhiều việc để quản lý log quá chi tiết, thay vào đó thông qua lớp CompositeLogbackAppender
nó sẽ cho phép các plugin bổ sung thêm các tính năng quản lý log nâng cao hơn.