3.1 Danh sách các cấp sự kiện

Ghi nhật ký là quá trình ghi lại bất kỳ sự kiện nào xảy ra trong khi chương trình đang chạy. Nhiệm vụ của bạn với tư cách là một lập trình viên là record everything importantbởi vì sau đó, khi productioncó những lỗi lạ và/hoặc nghiêm trọng, bạn sẽ không có gì khác ngoài những bản ghi này.

Mọi lỗi sẽ được loại bỏ nhanh hơn nhiều lần nếu bạn có tất cả thông tin về nó và về tất cả lịch sử của các cuộc gọi. Nhưng một kết luận đơn giản xuất phát từ đây - ghi lại mọi thứ nói chung: lệnh gọi của tất cả các phương thức, giá trị của tất cả các tham số.

Đây cũng không phải là một lựa chọn - quá nhiều thông tin cũng tệ như quá ít. Chúng ta cần đăng nhập thông minh. Được tạo ra bởi con người cho con người. Và ở đây chúng ta đi đến thực tế đầu tiên về việc ghi nhật ký - tất cả các mục trong nhật ký được chia thành các danh mục ngay cả tại thời điểm chúng được tạo.

Danh sách các cấp độ sự kiện

Lập trình viên, khi ghi một sự kiện vào nhật ký, phải tự quyết định mức độ quan trọng của thông tin này. Mức độ nghiêm trọng của sự kiện được chọn bởi tác giả của thông báo. Có log4j5 mức độ quan trọng của thông tin được ghi lại:

  • DEBUG
  • INFO
  • WARN
  • ERROR
  • FATAL

Dưới đây chúng tôi sẽ nói về họ chi tiết hơn.

3.2 GỠ LỖI

Cấp độ DEBUGđược coi là ít quan trọng nhất. Thông tin được ghi vào nhật ký với mức độ quan trọng này chỉ cần thiết trong quá trình gỡ lỗi ứng dụng. Để ghi thông tin cần thiết trong quá trình gỡ lỗi, phương pháp này được sử dụng debug().

Ví dụ:

class Manager {
    private static final Logger logger = LoggerFactory.getLogger(Manager.class);

    public boolean processTask(Task task) {
        logger.debug("processTask id = " + task.getId());
        try {
            task.start();
            task.progress();
            task.complete();
            return true;
        } catch (Exception e) {
            logger.error("Unknown error", e);
            return false;
        }
    }
}

Hãy chú ý, phương thức debugở ngay đầu phương thức (phương thức chưa có thời gian để làm bất cứ điều gì) và ghi giá trị của biến được truyền cho phương thức vào nhật ký. Đây là trường hợp sử dụng phổ biến nhất cho phương pháp này debug().

3.3 THÔNG TIN và CẢNH BÁO

Hai cấp độ tiếp theo là INFOWARN. Có hai phương thức cho chúng - info()warn().

Cấp độ INFOđược sử dụng đơn giản cho các thông báo thông tin: điều này và điều đó xảy ra. Khi bạn bắt đầu phân tích cú pháp một lỗi trong nhật ký, việc đọc thông tin cơ bản của nó có thể rất hữu ích. Phương pháp này là hoàn hảo cho việc này info().

Cấp độ WARNđược sử dụng để viết cảnh báo (từ cảnh báo từ ). Thông thường, với mức độ quan trọng này, thông tin được viết rằng đã xảy ra sự cố, nhưng chương trình biết phải làm gì trong tình huống này.

Ví dụ, trong quá trình ghi một tệp vào đĩa, hóa ra tệp đó đã tồn tại. Tại đây, chương trình có thể ghi cảnh báo (cảnh báo), nhưng hiển thị cho người dùng một hộp thoại và đề nghị chọn một tên tệp khác.

Ví dụ:

class FileManager {
    private static final Logger logger = LoggerFactory.getLogger(FileManager.class);

    public boolean saveFile(FileData file) {
        logger.info(“save the file ” + file.getName());
        boolean resultOK = SaveUtils.save(file);
        if (resultOK) return true;

        logger.warn(“file writing problem ” + file.getName());
        String filename = Dialog.selectFile();
        boolean result = SaveUtils.save(file, filename);
        return result;
    }

3.4 LỖI và FATAL

Cuối cùng, hai cấp độ ghi nhật ký quan trọng nhất là ERRORFATAL. Đối với chúng, cũng có các phương thức đặc biệt có cùng tên: error()fatal().

Họ cũng quyết định chia lỗi thành hai loại - lỗi thông thườnglỗi nghiêm trọng . Lỗi nghiêm trọng thường dẫn đến sự cố ứng dụng (đối với ứng dụng dành cho máy tính để bàn) hoặc sự cố dịch vụ web (đối với ứng dụng web).

Một ví dụ điển hình khác là hệ điều hành Windows. Nếu chương trình của bạn vừa bị lỗi, thì theo quan điểm của hệ điều hành, đây là Error. Và nếu bản thân hệ điều hành bị sập và bạn thấy màn hình xanh chết chóc của Windows, thì đây đã là Fatal error.

Trong các ứng dụng Java, các sự kiện thường Errorđược Fatalliên kết với các ngoại lệ được nêu ra. Ví dụ:

class Manager {
    private static final Logger logger = LoggerFactory.getLogger(Manager.class);

    public boolean processTask(Task task) {
        logger.debug("processTask id = " + task.getId());
        try {
            task.start();
            task.progress();
            task.complete();
            return true;
        } catch (Exception e) {
            logger.error("Unknown error", e);
            return false;
        }
    }
}

3.5 Những gì để đăng nhập

Tất nhiên, không đáng để ghi lại mọi thứ liên tiếp. Trong hầu hết các trường hợp, điều này làm giảm đáng kể khả năng đọc của nhật ký và xét cho cùng, nhật ký được viết trước tiên để được đọc.

Ngoài ra, bạn không thể ghi nhiều thông tin cá nhân và tài chính vào nhật ký. Bây giờ với điều này một cách nghiêm ngặt và dễ dàng, bạn có thể bị phạt hoặc kiện tụng. Sớm hay muộn, nhật ký như vậy sẽ rò rỉ sang một bên và sau đó sẽ không có vấn đề gì.

Vì vậy, những gì nên được đăng nhập?

Trước tiên, bạn cần đăng nhập phần bắt đầu của ứng dụng . Sau khi ứng dụng khởi động, bạn nên ghi nhật ký chế độ hoạt động và các cài đặt quan trọng khác nhau - điều này sẽ giúp bạn dễ dàng đọc nhật ký hơn trong tương lai.

Thứ hai, bạn cần ghi lại trạng thái của tất cả các dịch vụ của bên thứ ba mà ứng dụng của bạn hoạt động: hệ thống gửi thư, bất kỳ dịch vụ bên ngoài nào. Ở mức tối thiểu, bạn cần đảm bảo thời điểm kết nối với chúng để đảm bảo rằng chúng hoạt động bình thường.

Thứ ba, tất cả các trường hợp ngoại lệ cần phải được ghi lại . Nếu chúng được mong đợi, thì thông tin về chúng có thể được viết một cách cô đọng. Thông tin đầy đủ về các trường hợp ngoại lệ cung cấp 50% -80% thông tin quan trọng khi tìm kiếm lỗi.

Bạn cũng cần đăng nhập tắt ứng dụng . Ứng dụng phải kết thúc bình thường và không ném hàng tá lỗi vào nhật ký. Thông thường ở nơi này, bạn có thể tìm thấy các tác vụ bị kẹt, sự cố với nhóm luồng hoặc sự cố khi xóa các tệp tạm thời.

Đảm bảo ghi nhật ký mọi thứ liên quan đến bảo mật và ủy quyền người dùng . Nếu người dùng cố gắng đăng nhập hoặc đặt lại mật khẩu của họ 10 lần liên tiếp, thông tin này sẽ được phản ánh trong nhật ký.

Ghi lại càng nhiều thông tin càng tốt về các tác vụ không đồng bộ - các ngoại lệ thường bị mất trong các luồng như vậy. Đối với tác vụ không đồng bộ, hãy đảm bảo ghi nhật ký bắt đầu và kết thúc. Hoàn thành thành công nên được ghi lại theo cách tương tự như một vấn đề.

Còn gì nữa không? Khởi chạy các tác vụ theo thời gian, khởi chạy các tác vụ được lưu trữ SQL-procedures, đồng bộ hóa dữ liệu, mọi thứ liên quan đến giao dịch phân tán. Tôi nghĩ thế là đủ cho một sự khởi đầu. Bạn sẽ thêm vào danh sách này trong tương lai.