JavaRush /Blog Java /Random-VI /Tại sao cần đăng nhập?

Tại sao cần đăng nhập?

Xuất bản trong nhóm
Xin chào! Khi viết bài giảng, tôi đặc biệt lưu ý xem một chủ đề cụ thể có chắc chắn sẽ được sử dụng trong công việc thực tế hay không. Tại sao bạn cần đăng nhập - 1 Vì vậy, CHÚ Ý! Chủ đề chúng ta đề cập hôm nay chắc chắn sẽ hữu ích với bạn trong tất cả các dự án của bạn ngay từ ngày đầu tiên đi làm. Chúng ta sẽ nói về việc đăng nhập. Chủ đề này không khó chút nào (tôi thậm chí có thể nói là dễ). Nhưng ở công việc đầu tiên, bạn đã có đủ căng thẳng để giải quyết những vấn đề hiển nhiên, vì vậy tốt hơn hết là bạn nên giải quyết triệt để ngay bây giờ :) Vì vậy, hãy bắt đầu. Ghi nhật ký là gì? Ghi nhật ký là ghi lại dữ liệu ở đâu đó về hoạt động của một chương trình. Nơi ghi dữ liệu này được gọi là “ log ”. Hai câu hỏi nảy sinh cùng một lúc: dữ liệu nào được ghi lại ở đâu và gì? Hãy bắt đầu với "ở đâu". Bạn có thể ghi lại dữ liệu vận hành chương trình ở nhiều nơi khác nhau. Ví dụ: trong quá trình học, bạn thường xuất dữ liệu ra bảng điều khiển bằng các tệp System.out.println(). Đây là cách ghi nhật ký thực sự, mặc dù là cách đơn giản nhất. Tất nhiên, điều này không thuận tiện cho khách hàng hoặc nhóm hỗ trợ sản phẩm: rõ ràng họ sẽ không muốn cài đặt IDE và giám sát bảng điều khiển :) Ngoài ra còn có một định dạng ghi thông tin quen thuộc hơn - trong tệp văn bản. Mọi người đọc chúng theo cách này dễ dàng hơn nhiều và chắc chắn dễ dàng lưu trữ hơn nhiều! Bây giờ câu hỏi thứ hai: dữ liệu nào về hoạt động của chương trình sẽ được ghi vào nhật ký? Nhưng ở đây mọi thứ phụ thuộc vào bạn! Hệ thống ghi nhật ký Java rất linh hoạt. Bạn có thể định cấu hình nó theo cách mà toàn bộ tiến trình của chương trình sẽ được ghi lại. Một mặt, điều này là tốt. Nhưng mặt khác, hãy tưởng tượng kích thước nhật ký của Facebook hoặc Twitter có thể đạt tới nếu mọi thứ được viết ở đó. Những công ty lớn như vậy có thể có khả năng lưu trữ lượng thông tin này. Nhưng hãy tưởng tượng việc tìm kiếm thông tin về một lỗi nghiêm trọng trong nhật ký chứa 500 gigabyte văn bản sẽ khó đến mức nào? Nó còn tệ hơn cả việc mò kim đáy biển. Do đó, việc đăng nhập Java có thể được cấu hình để chỉ ghi dữ liệu lỗi vào nhật ký (log). Hoặc thậm chí chỉ về những lỗi nghiêm trọng! Mặc dù nói “đăng nhập bằng Java” không hoàn toàn chính xác. Thực tế là nhu cầu ghi nhật ký đã nảy sinh giữa các lập trình viên trước khi chức năng này được thêm vào ngôn ngữ. Và vào thời điểm Java có thư viện ghi nhật ký riêng, mọi người đều đã sử dụng thư viện log4j. Lịch sử xuất hiện của việc ghi nhật ký trong Java thực sự rất dài và nhiều thông tin; lúc rảnh rỗi, bạn có thể đọc bài đăng này trên Habré . Nói tóm lại, Java có thư viện ghi nhật ký riêng, nhưng hầu như không ai sử dụng nó :) Sau đó, khi một số thư viện ghi nhật ký khác nhau xuất hiện và tất cả các lập trình viên bắt đầu sử dụng các thư viện ghi nhật ký khác nhau, một vấn đề tương thích đã nảy sinh. Để ngăn mọi người làm điều tương tự bằng cách sử dụng hàng tá thư viện khác nhau với các giao diện khác nhau, khung trừu tượng slf4j đã được tạo(“Mặt tiền ghi nhật ký dịch vụ cho Java”). Nó được gọi là trừu tượng hóa vì mặc dù bạn sử dụng các lớp slf4j và gọi các phương thức của chúng, nhưng về cơ bản, chúng có tất cả các khung ghi nhật ký trước đó đang chạy: log4j, java.util.logging tiêu chuẩn và các khung khác. Nếu hiện tại bạn cần một số tính năng cụ thể của log4j mà các thư viện khác không có, nhưng bạn không muốn liên kết chặt chẽ dự án với thư viện cụ thể này, chỉ cần sử dụng slf4j. Và cô ấy sẽ “kéo” các phương thức log4j. Nếu bạn đổi ý và quyết định rằng bạn không cần các tính năng log4j nữa, bạn chỉ cần cấu hình lại “trình bao bọc” (tức là slf4j) để sử dụng thư viện khác. Mã của bạn sẽ không ngừng hoạt động, vì trong đó bạn gọi các phương thức của slf4j chứ không phải của một thư viện cụ thể. Một sự lạc đề nhỏ. Để các ví dụ sau hoạt động, bạn cần tải xuống thư viện slf4j từ đây và thư viện log4j từ đây . Tiếp theo, chúng ta cần giải nén kho lưu trữ và thêm các tệp jar mà chúng ta cần vào đường dẫn lớp thông qua Intellij IDEA. Các mục menu: Tệp -> Cấu trúc dự án -> Thư viện Chọn các lọ cần thiết và thêm chúng vào dự án (có rất nhiều lọ trong kho lưu trữ mà chúng tôi đã tải xuống, hãy xem những lọ bạn cần trong ảnh) Tại sao bạn cần đăng nhập - 2Tại sao bạn cần đăng nhập - 3Lưu ý - hướng dẫn này dành cho những lọ đó những sinh viên chưa biết sử dụng Maven. Nếu bạn biết cách sử dụng nó, tốt hơn hết bạn nên thử bắt đầu với nó: nó thường dễ dàng hơn nhiều. Nếu bạn sử dụng Maven , hãy thêm phần phụ thuộc này:
<dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.14.0</version>
</dependency>
Tuyệt vời, chúng tôi đã sắp xếp xong các cài đặt :) Hãy xem cách hoạt động của slf4j. Làm thế nào chúng ta có thể chắc chắn rằng tiến trình của chương trình được ghi lại ở đâu đó? Để làm được điều này, chúng ta cần hai thứ - một trình ghi nhật kýmột trình nối thêm . Hãy bắt đầu với cái đầu tiên. Trình ghi nhật ký là một đối tượng quản lý hoàn toàn việc lưu giữ hồ sơ . Tạo một trình ghi nhật ký rất dễ dàng: nó được thực hiện bằng phương thức tĩnh - LoggerFactory.getLogger(). Là một tham số cho phương thức, bạn cần chuyển lớp có công việc sẽ được ghi lại. Hãy chạy mã của chúng tôi:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyTestClass {

   public static final Logger LOGGER = LoggerFactory.getLogger(MyTestClass.class);

   public static void main(String[] args) {

       LOGGER.info("Test log record!!!");
       LOGGER.error("В программе возникла ошибка!");
   }
}
Đầu ra của bảng điều khiển: ERROR StatusLogger Không tìm thấy tệp cấu hình Log4j 2. Sử dụng cấu hình mặc định (chỉ ghi lỗi vào bảng điều khiển) hoặc cấu hình do người dùng cung cấp theo chương trình. Đặt thuộc tính hệ thống 'log4j2.debug' để hiển thị ghi nhật ký khởi tạo nội bộ Log4j 2. Xem https://logging.apache.org/log4j/2.x/manual/configuration.html để biết hướng dẫn cách định cấu hình Log4j 2 15:49:08.907 [main] ERROR MyTestClass - Đã xảy ra lỗi trong chương trình! Chúng ta thấy gì ở đây? Đầu tiên chúng ta thấy một thông báo lỗi. Nó xuất hiện vì chúng tôi hiện thiếu các cài đặt cần thiết. Do đó, trình ghi nhật ký của chúng tôi hiện chỉ có thể xuất thông báo lỗi (ERROR) và chỉ ra bảng điều khiển. Phương thức này logger.info()không được thực thi. Nhưng logger.error()nó đã hoạt động! Bảng điều khiển hiển thị ngày hiện tại, phương thức xảy ra lỗi ( main), từ LỖI và thông báo của chúng tôi! LỖI là mức ghi nhật ký. Nói chung, nếu một mục nhật ký được đánh dấu bằng từ ERROR, điều đó có nghĩa là đã xảy ra lỗi tại thời điểm đó trong chương trình. Nếu một mục được đánh dấu bằng từ INFO, điều đó có nghĩa đó chỉ là thông tin hiện tại về hoạt động bình thường của chương trình. Thư viện SLF4J có khá nhiều cấp độ ghi nhật ký khác nhau cho phép bạn cấu hình ghi nhật ký một cách linh hoạt. Chúng rất dễ quản lý: tất cả logic cần thiết đều đã có trong lớp Logger. Bạn chỉ cần gọi các phương thức cần thiết. Nếu bạn muốn đăng một tin nhắn thông thường, hãy gọi logger.info(). Thông báo lỗi - logger.error(). Hiển thị cảnh báo - logger.warn() Bây giờ hãy nói về phần bổ sung . Ứng dụng bổ sung là nơi chứa dữ liệu của bạn. Bạn có thể nói đối lập với nguồn dữ liệu là “điểm B”. Theo mặc định, dữ liệu được xuất ra bàn điều khiển. Xin lưu ý rằng trong ví dụ trước, chúng ta không phải định cấu hình bất cứ thứ gì: văn bản xuất hiện trong chính bảng điều khiển, nhưng trình ghi nhật ký từ thư viện log4j chỉ có thể xuất thông báo mức LỖI tới bảng điều khiển. Rõ ràng là sẽ thuận tiện hơn cho mọi người khi đọc nhật ký từ một tệp văn bản và lưu trữ nhật ký trong cùng một tệp. Để thay đổi hành vi mặc định của trình ghi nhật ký, chúng ta cần định cấu hình phần bổ sung tệp của mình . Để bắt đầu, bạn cần tạo một tệp log4j.xml ngay trong thư mục src hoặc trong thư mục tài nguyên nếu bạn sử dụng Maven hoặc trong thư mục tài nguyên nếu bạn sử dụng Maven. Bạn đã quen thuộc với định dạng xml, gần đây chúng tôi đã có một bài giảng về nó :) Đây là nội dung của nó:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
   <Appenders>
       <File name="MyFileAppender" fileName="C:\Users\Username\Desktop\testlog.txt" immediateFlush="false" append="false">
           <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
       </File>
   </Appenders>
   <Loggers>
       <Root level="INFO">
           <AppenderRef ref="MyFileAppender"/>
       </Root>
   </Loggers>
</Configuration>
Nó trông không đặc biệt phức tạp :) Nhưng chúng ta vẫn xem qua nội dung.
<Configuration status="INFO">
Đây được gọi là trình ghi trạng thái. Nó không liên quan đến logger của chúng tôi và được log4j sử dụng nội bộ. Bạn có thể đặt trạng thái=”TRACE” thay vì trạng thái=”INFO” và tất cả thông tin về hoạt động bên trong của log4j sẽ được xuất ra bảng điều khiển (trình ghi trạng thái xuất dữ liệu ra bảng điều khiển, ngay cả khi ứng dụng bổ sung của chúng tôi cho chương trình là tệp -dựa trên). Bây giờ chúng tôi không cần điều này, vì vậy chúng tôi sẽ để mọi thứ như cũ.
<Appenders>
   <File name="MyFileAppender" fileName="C:\Users\Евгений\Desktop\testlog.txt" append="true">
       <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
   </File>
</Appenders>
Ở đây chúng tôi tạo ra phần bổ sung của mình. Thẻ <File>cho biết rằng nó sẽ là một tập tin. name="MyFileAppender"- tên của ứng dụng của chúng tôi. fileName="C:\Users\Username\Desktop\testlog.txt"— đường dẫn đến tệp nhật ký nơi tất cả dữ liệu sẽ được ghi. append="true"- liệu có cần thiết phải ghi thêm dữ liệu vào cuối tập tin hay không. Trong trường hợp của chúng tôi, đây sẽ là trường hợp. Nếu được đặt thành false , nội dung nhật ký cũ sẽ bị xóa mỗi khi chương trình được khởi động lại. <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>- Đây là các cài đặt định dạng. Ở đây chúng ta có thể sử dụng các biểu thức chính quy để tùy chỉnh định dạng của văn bản trong nhật ký của mình.
<Loggers>
       <Root level="INFO">
           <AppenderRef ref="MyFileAppender"/>
       </Root>
</Loggers>
Ở đây chúng tôi chỉ định mức ghi nhật ký (cấp gốc). Chúng tôi đã đặt cấp độ INFO: nghĩa là tất cả các thông báo ở cấp độ cao hơn INFO (theo bảng chúng tôi đã xem ở trên) sẽ không được đưa vào nhật ký. Chúng ta sẽ có 3 thông báo trong chương trình của mình: một INFO, một WARN và một ERROR. Với cấu hình hiện tại, cả 3 tin nhắn sẽ được ghi vào nhật ký. Nếu bạn thay đổi cấp độ gốc thành LỖI, chỉ thông báo cuối cùng từ LOGGER.error() mới được ghi lại. Ngoài ra, một liên kết đến phần bổ sung được đặt ở đây. Để tạo một liên kết như vậy, bạn cần <Root>tạo một thẻ bên trong thẻ <ApprenderRef>và thêm tham số vào thẻ đó ref=”Name твоего аппендера”. Chúng tôi đã tạo tên của ứng dụng ở đây, trong trường hợp bạn quên: <File name="MyFileAppender" Và đây là mã chương trình của chúng tôi!
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyTestClass {

   public static final Logger LOGGER = LoggerFactory.getLogger(MyTestClass.class);

   public static void main(String[] args) {

       LOGGER.info("Начало работы программы!!!");

       try {
           LOGGER.warn("Внимание! Программа пытается разделить одно число на другое");
           System.out.println(12/0);
       } catch (ArithmeticException x) {

           LOGGER.error("Ошибка! Произошло деление на ноль!");
       }
   }
}
Tất nhiên, nó hơi quanh co một chút (bắt RuntimeException là một ý tưởng tầm thường), nhưng nó hoàn hảo cho mục đích của chúng ta :) Hãy chạy phương thức của chúng ta main()4 lần liên tiếp và xem tệp testlog.txt của chúng ta. Không cần phải tạo trước: thư viện sẽ tự động thực hiện việc đó. Mọi thứ đã hoạt động! :) Bây giờ bạn đã có một trình ghi nhật ký được cấu hình. Bạn có thể thử một số chương trình bạn đã viết trước đó, thêm lệnh gọi trình ghi nhật ký vào tất cả các phương thức và xem nhật ký kết quả :) Để đọc thêm, tôi thực sự khuyên bạn nên viết bài viết này . Ở đó, chủ đề ghi nhật ký được thảo luận chuyên sâu và sẽ không dễ để đọc nó chỉ trong một lần. Nhưng nó chứa rất nhiều thông tin bổ sung hữu ích. Ví dụ: bạn sẽ học cách định cấu hình trình ghi nhật ký để nó tạo một tệp văn bản mới nếu tệp testlog.txt của chúng tôi đạt đến một kích thước nhất định :) Và đây là phần cuối của bài học của chúng ta! Hôm nay bạn đã học về một chủ đề rất quan trọng và kiến ​​thức này chắc chắn sẽ hữu ích cho bạn trong công việc sau này. Hẹn gặp lại! :)
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION