Bỏ qua, đến nội dung

Câu hỏi thường gặp (FAQ) — Logger

Cài đặt và cấu hình

File log được lưu ở đâu?

Mặc định, file log được lưu tại ./storage/logs (tương đối với thư mục gốc Digiforce). Đường dẫn chính xác được xác định bởi @digiforce-nc/logger thông qua hàm getLoggerFilePath(). Nếu bạn chạy multi-app, mỗi app có thư mục log riêng (tên thư mục = tên app).

Plugin Logger có tạo bảng database nào không?

Không. Plugin đọc trực tiếp từ filesystem. Không có collection hay migration nào. Điều này giúp plugin nhẹ và không ảnh hưởng đến database.

Làm sao thay đổi thư mục lưu log?

Cấu hình biến môi trường LOGGER_BASE_PATH:

bash
LOGGER_BASE_PATH=/var/log/digiforce

Khởi động lại server sau khi thay đổi.

Sử dụng

Làm sao xem log từ xa mà không SSH?

Đó chính là mục đích của plugin này. Vào Settings → Logger, bạn sẽ thấy cây thư mục chứa tất cả file .log. Chọn file cần thiết và nhấn Download (.tar.gz) để tải về máy local.

Có thể tìm kiếm nội dung bên trong file log không?

Hiện tại, plugin chỉ hỗ trợ tìm kiếm theo tên file (ô Search trên giao diện). Để tìm kiếm nội dung bên trong log, bạn cần:

  1. Tải file log về máy local
  2. Sử dụng công cụ tìm kiếm (grep, IDE, log viewer)

Hoặc cấu hình gửi log đến hệ thống tập trung (ELK Stack, Grafana Loki) để tìm kiếm trực tiếp.

Tính năng Diagnostic Collect hoạt động như thế nào?

Khi frontend gặp lỗi, hệ thống gọi logger:collect kèm thông tin lỗi. Server sẽ:

  1. Ghi thông tin lỗi và biến môi trường quan trọng vào log (APP_ENV, APP_PORT, DB_DIALECT, LOGGER_LEVEL, v.v.)
  2. Tìm file log mới nhất cho mỗi loại: request, sql, system, system_error
  3. Đóng gói và trả về logs.tar.gz

Điều này giúp thu thập đầy đủ thông tin để debug mà không cần truy cập server.

Vận hành

File log quá lớn, làm sao xử lý?

Một số biện pháp:

Giải phápCách thực hiện
Giảm mức logĐặt LOGGER_LEVEL=warn thay vì info hoặc debug
Tắt SQL logĐặt DB_LOGGING=off (SQL log thường rất lớn)
Cấu hình rotationLogger core tự động rotate theo kích thước và thời gian
Xoá log cũXoá thủ công file log không cần thiết trong thư mục storage/logs

Không thấy file log nào trên giao diện?

Kiểm tra theo thứ tự:

  1. LOGGER_TRANSPORT có bao gồm file? Nếu chỉ cấu hình console, log không được ghi ra file
  2. Thư mục log có tồn tại? Kiểm tra ./storage/logs hoặc đường dẫn đã cấu hình
  3. Quyền filesystem? Server cần quyền đọc/ghi vào thư mục log
  4. App name? Log được lưu trong thư mục con theo tên app (mặc định: main)

Tải log bị lỗi 500 — "Download logs failed"?

Nguyên nhân có thể:

  • File đã bị xoá giữa lúc liệt kê và lúc download (do rotation)
  • Không đủ quyền đọc file trên server
  • Dung lượng quá lớn — thử chọn ít file hơn

Kiểm tra server log (console) để xem chi tiết lỗi.

Bảo mật

Ai có quyền truy cập Logger?

Chỉ người dùng có quyền admin. Plugin đăng ký ACL snippet pm.logger với action logger:*, nghĩa là tất cả endpoint logger đều yêu cầu quyền admin.

Có rủi ro bảo mật nào khi dùng plugin này?

Plugin có các biện pháp bảo vệ:

  • Path traversal check: Không cho phép truy cập file ngoài thư mục log (kiểm tra .., absolute path, null bytes)
  • File type check: Chỉ cho phép file .log
  • ACL: Chỉ admin truy cập được

Tuy nhiên, file log có thể chứa thông tin nhạy cảm (token, email, v.v.). Cần cẩn thận khi chia sẻ file log đã tải về.