Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Tìm hiểu khái niệm cơ bản về ghi nhật ký Java

Java đã kết hợp thư viện API ghi nhật ký như một phần của khuôn khổ của nó từ JDK 1.4. Ngày nay, đây là một hỗ trợ được tích hợp sẵn từ Java. Tuy nhiên, thư viện này có thể tùy chỉnh và có thể mở rộng theo nghĩa là chúng ta có thể sử dụng một hoặc nhiều giải pháp ghi nhật ký thay thế do thư viện bên thứ ba cung cấp. Mặc dù các giải pháp của bên thứ ba này có cách tiếp cận khác để tạo dữ liệu nhật ký, nhưng cuối cùng chúng có chung mục tiêu là ghi nhật ký thông báo từ thời gian chạy ứng dụng. Bài viết này khám phá những điều cơ bản về ghi nhật ký và chỉ ra cách nó có thể được sử dụng trong một chương trình Java.

Ghi nhật ký Java

Đ nhật ký thường có nghĩa là duy trì một số loại bản ghi. Từ quan điểm của lập trình, nó là một quá trình viết các thông báo trong một tệp nhật ký trong quá trình thực hiện chương trình. Thông thường, các bản ghi tin nhắn liên tục được lập trình viên giới thiệu để thu thập thông tin thống kê thời gian chạy nhất định mà khi phân tích, chúng có thể tiết lộ các tình huống không lường trước được. Trên thực tế, có thể có nhiều lý do khác nhau khiến việc ghi nhật ký được sử dụng và đây chỉ là một trong số đó. Theo tài liệu Java API, có bốn cách sử dụng chính của việc ghi nhật ký:

  • Để người dùng cuối và quản trị viên hệ thống chẩn đoán sự cố.
  • Thật thuận tiện cho các kỹ sư dịch vụ hiện trường chẩn đoán sự cố từ các tin nhắn đã ghi và khắc phục sự cố một cách nhanh chóng.
  • Tổ chức phát triển có thể theo dõi việc thực thi nội bộ của một hệ thống con cụ thể và phân tích nó.
  • Các nhà phát triển có thể gỡ lỗi ứng dụng đang được phát triển bằng cách hiểu nhanh về vấn đề cơ bản từ các tin nhắn đã ghi.

Ghi nhật ký API Java được thiết kế theo cách không tốn kém theo nghĩa là nó có thể được để lại như một phần dư ngay cả trong một ứng dụng sản xuất. Điều này không tạo ra nhiều chi phí cho hiệu quả thực thi chương trình. API cung cấp cơ chế thay đổi việc tạo thông báo nhật ký một cách động để có thể giảm thiểu tác động của việc ghi nhật ký trong các hoạt động đòi hỏi hiệu quả tối đa. API bao gồm một số lớp và giao diện có thể được tùy chỉnh bằng cách mở rộng chúng. Toàn bộ API ghi nhật ký được đóng gói trong java.util.logging . Các lớp và giao diện trong gói này cung cấp các phương tiện ghi nhật ký cốt lõi trong Java.

Các cấp độ ghi nhật ký

Tính cấp thiết của việc đăng nhập một chương trình Java có thể được phân loại thành nhiều cấp độ. Bằng cách lên và xuống cấp, chúng tôi có thể tăng hoặc giảm chi phí đăng nhập ứng dụng sản xuất. Đây là cách chúng tôi kiểm soát hiệu quả thực thi của ứng dụng khi cần ghi lại một hoặc nhiều sự kiện của ứng dụng. Điều này đạt được thông qua một lớp học có tên là Cấp độ , xác định tầm quan trọng của việc ghi nhật ký. Mức nhật ký được sắp xếp và chỉ định bởi static hằng số nguyên, chẳng hạn như:

  • Level.ALL: Tất cả các tin nhắn đều được ghi lại, không phân biệt mức độ quan trọng
  • Level.OFF: Ghi nhật ký bị tắt
  • Level.SEVERE: Chỉ ra sự thất bại nghiêm trọng; phải được ghi lại
  • Cấp độ. CẢNH BÁO: Cho biết các thông báo cảnh báo
  • Level.INFO: Thông báo cung cấp thông tin về thời gian chạy
  • Cấp độ.CONFIG: Thông báo cấu hình tĩnh
  • Level.FINE: Theo dõi tin nhắn
  • Level.FINER: Thông điệp theo dõi chi tiết
  • Level.FINEST: Thông điệp theo dõi rất chi tiết

Thành phần ghi nhật ký

Chúng tôi cần một Người ghi nhật ký ví dụ để thực hiện bất kỳ loại đăng nhập nào trong Java. Phiên bản này chịu trách nhiệm ghi dữ liệu vào một LogRecord . LogRecord các phiên bản được sử dụng để chuyển các yêu cầu ghi nhật ký giữa các khung ghi nhật ký và các trình xử lý nhật ký riêng lẻ. Java SE cung cấp năm loại trình xử lý tích hợp sẵn: StreamHandler , ConsoleHandler , FileHandler , SocketHandler MemoryHandler . Tuy nhiên, người ta có thể tạo một trình xử lý mới hoặc mở rộng một trong những trình xử lý này như một tùy chỉnh. Người xử lý xác định phải làm gì với bản ghi nhật ký; ví dụ, nó có thể được lưu giữ trong kho lưu trữ cục bộ hoặc chuyển nó đến máy chủ qua mạng. Java SE cũng bao gồm hai định dạng tiêu chuẩn: SimpleFormatter XMLFormatter . Những bộ định dạng này được sử dụng để định dạng một LogRecord sang định dạng con người có thể đọc được và định dạng XML chuẩn, tương ứng.

Có một LogManager lớp theo dõi thông tin ghi nhật ký chung, chẳng hạn như không gian tên phân cấp của Bộ ghi nhật ký có tên và một tập hợp các thuộc tính kiểm soát ghi nhật ký từ tệp cấu hình. Nó là trọng tâm của việc đăng nhập Java và kiểm soát khá nhiều thứ cần ghi, nơi đăng nhập, bao gồm các chi tiết khởi tạo khác, v.v.

Một ví dụ ghi nhật ký đơn giản

Tạo Người ghi nhật ký đối tượng rất đơn giản. Đây là một đoạn mã rất đơn giản để minh họa điều đó.

import java.util.logging.Logger;
public class App {
   private static Logger logger =
      Logger.getLogger(App.class.getName());
   public static void main(String[] args) {
      logger.info("This is a log message  !!!");
      logger.info("The name of the logger is " +
         logger.getName() + " nwhich is same as class name: "
            + App.class.getName());
   }
}

Người ghi nhật ký các đối tượng thường được đặt tên bằng Chuỗi giá trị của một không gian tên được phân tách bằng dấu chấm phân cấp. Trong trường hợp trước, nó giống với tên lớp. Tuy nhiên, tên có thể là một giá trị Chuỗi tùy ý, nhưng thông thường các tên dựa trên tên gói hoặc tên lớp của thành phần đã ghi. Cũng có thể tạo một trình ghi nhật ký “ẩn danh” sẽ không được lưu trữ trong Trình ghi nhật ký không gian tên.

Đăng nhập vào tệp bên ngoài bằng định dạng XML

Trong mã sau, thông báo nhật ký được chuyển hướng đến tệp bằng FileHandler .

Lưu ý: Tệp sẽ được tạo trong thư mục dự án.

FileHandler có thể ghi vào một tệp được chỉ định hoặc có thể ghi vào một nhóm tệp luân phiên. Tập hợp các tệp xoay vòng có nghĩa là các tệp cũ hơn được đặt tên bằng cách thêm 0,1,2, v.v. vào tên tệp cơ sở. XMLFormatter là định dạng mặc định được FileHandler sử dụng .

import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
public class App {
   private static FileHandler fileHandler;
   private static Logger logger =
      Logger.getLogger(App.class.getName());
   public static void main(String[] args) throws
         IOException {
      fileHandler = new
         FileHandler(App.class.getName() + ".log");
      logger.setLevel(Level.ALL);
      logger.addHandler(fileHandler);
      logger.info("Log message redirected to a file");
      logger.info("The name of the logger is " +
         logger.getName() + 
            " nwhich is same as class name: "
            + App.class.getName());
   }
}

Đăng nhập vào tệp bên ngoài bằng định dạng tùy chỉnh

Chúng tôi sẽ chỉnh sửa một chút đoạn mã sau để tùy chỉnh định dạng của tin nhắn. Điều này thay đổi cách các thư được viết trong tệp bên ngoài.

Lưu ý: Quan sát nội dung tệp nhật ký về cách định dạng đã thay đổi.
import java.io.IOException;
import java.util.logging.*;
public class App {
   private static FileHandler fileHandler;
   private static Logger logger =
      Logger.getLogger(App.class.getName());
   public static void main(String[] args) throws
         IOException {
      fileHandler = new
         FileHandler(App.class.getName() + ".log");
      logger.setLevel(Level.ALL);
      fileHandler.setFormatter(newCustomFormatter());
      logger.addHandler(fileHandler);
      logger.fine("Log message redirected to a file");
      logger.finer("The name of the logger is " +
         logger.getName());
      loggerfinest("This is same as class name: " +
         App.class.getName());
   }
   private static class CustomFormatter extends Formatter {
      private static final String format =
          "[%1$tF %1$tT] [%2$-4s] %3$s %n";
      public String format(LogRecord record) {
         returnString.format(format,
            record.getMillis(),
            record.getLevel().getLocalizedName(),
            record.getMessage());
      }
   }
}

Đó là tất cả. Thực hiện thử nghiệm với ghi nhật ký Java và thử nhiều khả năng khác. Tham khảo các tài liệu Java API nếu cần.

Các khung ghi nhật ký khác trong Java

Đôi khi, việc sử dụng khuôn khổ ghi nhật ký của bên thứ ba rất tiện lợi và có một số khuôn khổ ghi nhật ký khá phổ biến để bạn lựa chọn. Ví dụ:API ghi nhật ký do SLF4J cung cấp sử dụng một mẫu mặt tiền đơn giản là một lớp trừu tượng cho phép tách ứng dụng khỏi khuôn khổ ghi nhật ký của nó. Log4j về mặt cú pháp tương tự như ghi nhật ký Java tích hợp sẵn. Nó có cấu hình mặc định để xuất tất cả các thông báo nhật ký ra bảng điều khiển. Logback là sự kế thừa của Log4j và là một phần mở rộng của người tiền nhiệm của nó. tinyLog là một khung ghi nhật ký nhẹ có thể được sử dụng với cả Java và Android.

Kết luận

Quá trình ghi nhật ký được thiết kế để đơn giản và hiệu quả trong việc cung cấp những gì nó được cho là phải làm. Có thể nhanh chóng bắt đầu với các API ghi nhật ký trong Java. Thiết kế có thể mở rộng và có thể được tùy chỉnh theo nhu cầu cuối cùng của nhà phát triển. Bài viết này là một cái nhìn sơ lược về các khái niệm cơ bản về ghi nhật ký Java. Nhiều chi tiết phức tạp được lược bỏ để đơn giản hóa. Nghiên cứu Tài liệu Java API và các tài liệu thích hợp khác để biết thêm chi tiết về điều này.

Tài liệu tham khảo

  • Tổng quan về ghi nhật ký Java
  • Tài liệu Java API

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trình điều khiển Apache Spark ODBC

  2. Phát triển một mô-đun với Java 9 trong Eclipse IDE, Phần 2

  3. 5 lỗi thiết kế truy vấn SQL rất phổ biến cần tránh bằng mọi giá

  4. Làm thế nào để bỏ một cột trong SQL?

  5. 115 câu hỏi phỏng vấn SQL hàng đầu bạn phải chuẩn bị vào năm 2022