Ghi nhật ký là quá trình ghi thông tin vào tệp nhật ký. Tệp nhật ký chứa thông tin về các sự kiện khác nhau đã xảy ra trong hệ điều hành, phần mềm hoặc trong giao tiếp
Mục đích ghi nhật ký
Ghi nhật ký được thực hiện cho các mục đích sau
- Thu thập thông tin
- Xử lý sự cố
- Tạo số liệu thống kê
- kiểm toán
- lập hồ sơ
Ghi nhật ký không giới hạn để xác định lỗi trong quá trình phát triển phần mềm. Nó cũng được sử dụng để phát hiện sự cố bảo mật, giám sát vi phạm chính sách, cung cấp thông tin trong trường hợp có sự cố, tìm kiếm ứng dụng bị tắc nghẽn hoặc tạo dữ liệu sử dụng
Các sự kiện cần được ghi lại bao gồm lỗi xác thực đầu vào, lỗi xác thực và ủy quyền, lỗi ứng dụng, thay đổi cấu hình cũng như khởi động và tắt ứng dụng
Những sự kiện không đăng nhập
Các sự kiện không được ghi lại bao gồm mã nguồn ứng dụng, giá trị nhận dạng phiên, mã thông báo truy cập, dữ liệu cá nhân nhạy cảm, mật khẩu, chuỗi kết nối cơ sở dữ liệu, khóa mã hóa, tài khoản ngân hàng và dữ liệu chủ thẻ
Sau đây là một số phương pháp hay nhất để thực hiện ghi nhật ký
- Ghi nhật ký phải có ý nghĩa
- Ghi nhật ký phải chứa ngữ cảnh
- Ghi nhật ký nên được cấu trúc và thực hiện ở các cấp độ khác nhau
- Ghi nhật ký phải được cân bằng;
- Thông điệp ghi nhật ký phải dễ hiểu đối với con người và có thể phân tích cú pháp bằng máy
- Đăng nhập vào các ứng dụng phức tạp hơn nên được thực hiện vào một số tệp nhật ký
- Ghi nhật ký nên được điều chỉnh để phát triển và sản xuất
Mô-đun đăng nhập
Mô-đun ghi nhật ký Python xác định các hàm và lớp triển khai hệ thống ghi nhật ký sự kiện linh hoạt cho các ứng dụng và thư viện
Mô-đun ghi nhật ký có bốn thành phần chính. trình ghi nhật ký, trình xử lý, bộ lọc và trình định dạng. Trình ghi nhật ký hiển thị giao diện mà mã ứng dụng trực tiếp sử dụng. Trình xử lý gửi bản ghi nhật ký [được tạo bởi trình ghi nhật ký] đến đích thích hợp. Bộ lọc cung cấp cơ sở chi tiết hơn để xác định bản ghi nhật ký nào sẽ xuất ra. Trình định dạng chỉ định bố cục của các bản ghi nhật ký trong đầu ra cuối cùng
Hệ thống phân cấp ghi nhật ký Python
Trình ghi nhật ký Python tạo thành một hệ thống phân cấp. Một logger tên là
$ set_level.py This is a warning message This is an error message This is a critical message2 là cha của
$ set_level.py This is a warning message This is an error message This is a critical message3
Trình ghi nhật ký con truyền thông điệp tới trình xử lý được liên kết với trình ghi nhật ký tổ tiên của chúng. Do đó, không cần thiết phải xác định và định cấu hình trình xử lý cho tất cả các trình ghi nhật ký trong ứng dụng. Chỉ cần định cấu hình trình xử lý cho trình ghi nhật ký cấp cao nhất và tạo trình ghi nhật ký con khi cần
Các cấp độ được sử dụng để xác định mức độ nghiêm trọng của một sự kiện. Có sáu cấp độ đăng nhập
- PHÊ BÌNH
- LỖI
- CẢNH BÁO
- THÔNG TIN
- GỠ LỖI
- KHÔNG ĐƯỢC THIẾT LẬP
Nếu mức ghi nhật ký được đặt thành
$ set_level.py This is a warning message This is an error message This is a critical message4, tất cả các thông báo
$ set_level.py This is a warning message This is an error message This is a critical message4,
$ set_level.py This is a warning message This is an error message This is a critical message6 và
$ set_level.py This is a warning message This is an error message This is a critical message7 sẽ được ghi vào tệp nhật ký hoặc bảng điều khiển. Nếu nó được đặt thành
$ set_level.py This is a warning message This is an error message This is a critical message6, chỉ các tin nhắn
$ set_level.py This is a warning message This is an error message This is a critical message6 và
$ set_level.py This is a warning message This is an error message This is a critical message7 được ghi lại
Loggers có một khái niệm về mức độ hiệu quả. Nếu một mức không được đặt rõ ràng trên bộ ghi nhật ký, thì mức gốc của nó sẽ được sử dụng làm mức hiệu quả của nó. Nếu cấp độ gốc không được đặt mức rõ ràng, thì cấp độ gốc của nó sẽ được kiểm tra, v.v. - tất cả tổ tiên được tìm kiếm cho đến khi tìm thấy cấp độ được đặt rõ ràng
Khi bộ ghi nhật ký được tạo bằng
#!/usr/bin/python import logging main_logger = logging.getLogger['main'] main_logger.setLevel[5] dev_logger = logging.getLogger['main.dev'] print[main_logger.getEffectiveLevel[]] print[dev_logger.getEffectiveLevel[]]1, mức được đặt thành
#!/usr/bin/python import logging main_logger = logging.getLogger['main'] main_logger.setLevel[5] dev_logger = logging.getLogger['main.dev'] print[main_logger.getEffectiveLevel[]] print[dev_logger.getEffectiveLevel[]]2. Nếu cấp độ ghi nhật ký không được đặt rõ ràng với
#!/usr/bin/python import logging main_logger = logging.getLogger['main'] main_logger.setLevel[5] dev_logger = logging.getLogger['main.dev'] print[main_logger.getEffectiveLevel[]] print[dev_logger.getEffectiveLevel[]]3, các thông báo sẽ được gửi tới cha mẹ của bộ ghi nhật ký. Chuỗi trình ghi nhật ký tổ tiên của trình ghi nhật ký được duyệt qua cho đến khi tìm thấy tổ tiên có cấp độ khác với
#!/usr/bin/python import logging main_logger = logging.getLogger['main'] main_logger.setLevel[5] dev_logger = logging.getLogger['main.dev'] print[main_logger.getEffectiveLevel[]] print[dev_logger.getEffectiveLevel[]]2 hoặc đạt đến gốc. Trình ghi nhật ký gốc có mức thiết lập
$ set_level.py This is a warning message This is an error message This is a critical message4 mặc định
Tất cả các logger là hậu duệ của logger gốc. Mỗi logger chuyển các thông điệp nhật ký cho cha mẹ của nó. Trình ghi nhật ký mới được tạo bằng phương pháp
#!/usr/bin/python import logging main_logger = logging.getLogger['main'] main_logger.setLevel[5] dev_logger = logging.getLogger['main.dev'] print[main_logger.getEffectiveLevel[]] print[dev_logger.getEffectiveLevel[]]6. Gọi hàm không có tên [
#!/usr/bin/python import logging main_logger = logging.getLogger['main'] main_logger.setLevel[5] dev_logger = logging.getLogger['main.dev'] print[main_logger.getEffectiveLevel[]] print[dev_logger.getEffectiveLevel[]]1] trả về bộ ghi gốc
Bộ ghi gốc luôn có một mức rõ ràng được thiết lập, theo mặc định là
$ set_level.py This is a warning message This is an error message This is a critical message4
Trình lưu trữ gốc nằm ở đầu hệ thống phân cấp và luôn hiện diện, ngay cả khi không được định cấu hình. Nói chung, chương trình hoặc thư viện không nên đăng nhập trực tiếp vào bộ ghi gốc. Thay vào đó, một bộ ghi cụ thể cho chương trình nên được cấu hình. Trình ghi gốc có thể được sử dụng để dễ dàng bật và tắt tất cả các trình ghi nhật ký từ tất cả các thư viện
Mô-đun
#!/usr/bin/python import logging main_logger = logging.getLogger['main'] main_logger.setLevel[5] dev_logger = logging.getLogger['main.dev'] print[main_logger.getEffectiveLevel[]] print[dev_logger.getEffectiveLevel[]]9 có các phương thức đơn giản có thể được sử dụng ngay mà không cần bất kỳ cấu hình nào. Điều này có thể được sử dụng để đăng nhập đơn giản
$ set_level.py This is a warning message This is an error message This is a critical message8
Ví dụ gọi năm phương thức của mô-đun
#!/usr/bin/python import logging main_logger = logging.getLogger['main'] main_logger.setLevel[5] dev_logger = logging.getLogger['main.dev'] print[main_logger.getEffectiveLevel[]] print[dev_logger.getEffectiveLevel[]]9. Các tin nhắn được ghi vào bàn điều khiển
$ set_level.py This is a warning message This is an error message This is a critical message0
Lưu ý rằng trình ghi gốc được sử dụng và chỉ có ba thông báo được viết. Điều này là do theo mặc định, chỉ những tin nhắn có mức cảnh báo trở lên mới được viết
Mức ghi nhật ký được đặt với
#!/usr/bin/python import logging main_logger = logging.getLogger['main'] main_logger.setLevel[5] dev_logger = logging.getLogger['main.dev'] print[main_logger.getEffectiveLevel[]] print[dev_logger.getEffectiveLevel[]]3. Nó đặt ngưỡng cho bộ ghi này thành
$ set_level.py This is a warning message This is an error message This is a critical message22. Các thông báo ghi nhật ký ít nghiêm trọng hơn
$ set_level.py This is a warning message This is an error message This is a critical message22 sẽ bị bỏ qua
$ set_level.py This is a warning message This is an error message This is a critical message4
Trong ví dụ, chúng tôi thay đổi mức ghi nhật ký thành
$ set_level.py This is a warning message This is an error message This is a critical message24
$ set_level.py This is a warning message This is an error message This is a critical message6
#!/usr/bin/python import logging main_logger = logging.getLogger['main'] main_logger.setLevel[5] dev_logger = logging.getLogger['main.dev'] print[main_logger.getEffectiveLevel[]] print[dev_logger.getEffectiveLevel[]]1 trả về một logger với tên được chỉ định. Nếu tên là
$ set_level.py This is a warning message This is an error message This is a critical message26, nó sẽ trả về bộ ghi gốc. Tên có thể là một chuỗi được phân tách bằng dấu chấm xác định phân cấp ghi nhật ký; . b', hoặc 'a. b. c'. Lưu ý rằng có một tên gốc ẩn, không được hiển thị
$ set_level.py This is a warning message This is an error message This is a critical message
Bây giờ tất cả các tin nhắn đã được viết
Mức ghi nhật ký hiệu quả của Python
Cấp độ ghi nhật ký hiệu quả là cấp độ được đặt rõ ràng hoặc được xác định từ cha mẹ của bộ ghi nhật ký
#!/usr/bin/python import logging main_logger = logging.getLogger['main'] main_logger.setLevel[5] dev_logger = logging.getLogger['main.dev'] print[main_logger.getEffectiveLevel[]] print[dev_logger.getEffectiveLevel[]]
Trong ví dụ này, chúng tôi kiểm tra mức ghi nhật ký hiệu quả của hai thiết bị ghi nhật ký
$ set_level.py This is a warning message This is an error message This is a critical message2
Cấp độ của
$ set_level.py This is a warning message This is an error message This is a critical message27 không được đặt;
$ set_level.py This is a warning message This is an error message This is a critical message3
Trình xử lý là một đối tượng chịu trách nhiệm gửi các thông điệp tường trình thích hợp [dựa trên mức độ nghiêm trọng của thông điệp tường trình] đến đích được chỉ định của trình xử lý
Trình xử lý được truyền giống như các cấp. Nếu bộ ghi không có bộ xử lý, chuỗi tổ tiên của nó sẽ tìm kiếm bộ xử lý
$ set_level.py This is a warning message This is an error message This is a critical message4
Ví dụ tạo hai trình xử lý cho trình ghi nhật ký. trình xử lý tệp và trình xử lý bảng điều khiển
$ set_level.py This is a warning message This is an error message This is a critical message5
$ set_level.py This is a warning message This is an error message This is a critical message28 gửi bản ghi nhật ký đến tệp
$ set_level.py This is a warning message This is an error message This is a critical message29
$ set_level.py This is a warning message This is an error message This is a critical message00
$ set_level.py This is a warning message This is an error message This is a critical message30 gửi các bản ghi nhật ký tới một luồng. Nếu luồng không được chỉ định, thì
$ set_level.py This is a warning message This is an error message This is a critical message31 được sử dụng
$ set_level.py This is a warning message This is an error message This is a critical message01
Trình xử lý được thêm vào bộ ghi với
$ set_level.py This is a warning message This is an error message This is a critical message32
Trình định dạng nhật ký Python
Trình định dạng là một đối tượng định cấu hình thứ tự, cấu trúc và nội dung cuối cùng của bản ghi nhật ký. Ngoài chuỗi thông báo, các bản ghi nhật ký cũng bao gồm ngày và giờ, tên nhật ký và mức độ nghiêm trọng của nhật ký
$ set_level.py This is a warning message This is an error message This is a critical message02
Ví dụ tạo một trình ghi bảng điều khiển và thêm một trình định dạng vào trình xử lý của nó
$ set_level.py This is a warning message This is an error message This is a critical message03
Trình định dạng được tạo. Nó bao gồm ngày giờ, tên trình ghi nhật ký, tên cấp độ ghi nhật ký và thông báo tường trình
$ set_level.py This is a warning message This is an error message This is a critical message04
Bộ định dạng được đặt thành trình xử lý với
$ set_level.py This is a warning message This is an error message This is a critical message33
$ set_level.py This is a warning message This is an error message This is a critical message05
Thông báo với định dạng đã xác định được hiển thị trong bảng điều khiển
$ set_level.py This is a warning message This is an error message This is a critical message34 định cấu hình bộ ghi gốc. Nó thực hiện cấu hình cơ bản cho hệ thống ghi nhật ký bằng cách tạo trình xử lý luồng với trình định dạng mặc định.
$ set_level.py This is a warning message This is an error message This is a critical message35,
$ set_level.py This is a warning message This is an error message This is a critical message36,
$ set_level.py This is a warning message This is an error message This is a critical message37,
$ set_level.py This is a warning message This is an error message This is a critical message38 và
$ set_level.py This is a warning message This is an error message This is a critical message39 gọi
$ set_level.py This is a warning message This is an error message This is a critical message34 tự động nếu không có trình xử lý nào được xác định cho bộ ghi gốc
$ set_level.py This is a warning message This is an error message This is a critical message06
Ví dụ cấu hình bộ ghi gốc với
$ set_level.py This is a warning message This is an error message This is a critical message34
$ set_level.py This is a warning message This is an error message This is a critical message07
Với
$ set_level.py This is a warning message This is an error message This is a critical message42, chúng tôi đặt tệp mà chúng tôi ghi thông báo tường trình.
$ set_level.py This is a warning message This is an error message This is a critical message43 xác định những gì được ghi vào tệp; . Với ________ 344, chúng tôi đặt ngưỡng ghi nhật ký
$ set_level.py This is a warning message This is an error message This is a critical message08
Sau khi chạy chương trình, chúng tôi có năm thông báo được ghi vào tệp
$ set_level.py This is a warning message This is an error message This is a critical message29
$ set_level.py This is a warning message This is an error message This is a critical message46 đọc cấu hình ghi nhật ký từ tệp định dạng configparser
$ set_level.py This is a warning message This is an error message This is a critical message09
$ set_level.py This is a warning message This is an error message This is a critical message47 xác định trình ghi nhật ký, trình xử lý và trình định dạng
$ set_level.py This is a warning message This is an error message This is a critical message40
Ví dụ đọc tệp cấu hình ghi nhật ký từ
$ set_level.py This is a warning message This is an error message This is a critical message47
$ set_level.py This is a warning message This is an error message This is a critical message41
Dữ liệu động được ghi lại bằng cách sử dụng định dạng chuỗi
$ set_level.py This is a warning message This is an error message This is a critical message42
Ví dụ ghi dữ liệu tùy chỉnh vào thông điệp tường trình
$ set_level.py This is a warning message This is an error message This is a critical message43
Đây là thông điệp tường trình
Ngày giờ được bao gồm trong thông điệp tường trình với bản ghi nhật ký
$ set_level.py This is a warning message This is an error message This is a critical message49. Với tùy chọn cấu hình
$ set_level.py This is a warning message This is an error message This is a critical message50, chúng ta có thể định dạng chuỗi ngày giờ
$ set_level.py This is a warning message This is an error message This is a critical message44
Ví dụ định dạng ngày giờ của thông điệp tường trình
$ set_level.py This is a warning message This is an error message This is a critical message45
Chúng tôi đưa chuỗi ngày giờ vào nhật ký với
$ set_level.py This is a warning message This is an error message This is a critical message49
$ set_level.py This is a warning message This is an error message This is a critical message46
Tùy chọn
$ set_level.py This is a warning message This is an error message This is a critical message50 định dạng chuỗi ngày giờ
$ set_level.py This is a warning message This is an error message This is a critical message47
Lưu ý sự khác biệt trong định dạng chuỗi ngày giờ
Dấu vết ngăn xếp nhật ký Python
Theo dõi ngăn xếp là một ngăn xếp cuộc gọi của các chức năng đã được chạy đến điểm ngoại lệ bị ném. Dấu vết ngăn xếp được bao gồm trong tùy chọn
$ set_level.py This is a warning message This is an error message This is a critical message53
$ set_level.py This is a warning message This is an error message This is a critical message48
Trong ví dụ này, chúng tôi ghi nhật ký ngoại lệ được đưa ra khi chúng tôi cố gắng truy cập chỉ mục danh sách không tồn tại
$ set_level.py This is a warning message This is an error message This is a critical message49
Dấu vết ngăn xếp được đưa vào nhật ký bằng cách đặt
$ set_level.py This is a warning message This is an error message This is a critical message53 thành
$ set_level.py This is a warning message This is an error message This is a critical message55
$ set_level.py This is a warning message This is an error message This is a critical message60
Dấu vết ngăn xếp được bao gồm trong nhật ký
#!/usr/bin/python import logging main_logger = logging.getLogger['main'] main_logger.setLevel[5] dev_logger = logging.getLogger['main.dev'] print[main_logger.getEffectiveLevel[]] print[dev_logger.getEffectiveLevel[]]1 trả về một logger với tên được chỉ định. Nếu không có tên nào được chỉ định, nó sẽ trả về bộ ghi gốc. Đó là một thực tế phổ biến để đặt tên mô-đun ở đó với
$ set_level.py This is a warning message This is an error message This is a critical message57
Tất cả các cuộc gọi đến chức năng này với một tên đã cho trả về cùng một phiên bản trình ghi nhật ký. Điều này có nghĩa là các phiên bản trình ghi nhật ký không bao giờ cần phải được chuyển giữa các phần khác nhau của ứng dụng
$ set_level.py This is a warning message This is an error message This is a critical message61
Ví dụ tạo một logger mới với
#!/usr/bin/python import logging main_logger = logging.getLogger['main'] main_logger.setLevel[5] dev_logger = logging.getLogger['main.dev'] print[main_logger.getEffectiveLevel[]] print[dev_logger.getEffectiveLevel[]]1. Nó được cung cấp một trình xử lý tệp và một trình định dạng
$ set_level.py This is a warning message This is an error message This is a critical message62
Một bộ ghi có tên
$ set_level.py This is a warning message This is an error message This is a critical message2 được tạo;
$ set_level.py This is a warning message This is an error message This is a critical message63
Trình xử lý tệp được tạo. Các tin nhắn sẽ được ghi vào tệp
$ set_level.py This is a warning message This is an error message This is a critical message001
$ set_level.py This is a warning message This is an error message This is a critical message64
Một trình định dạng được tạo. Nó bao gồm thời gian, tên trình ghi nhật ký, cấp độ ghi nhật ký và thông báo để đăng nhập. Bộ định dạng được đặt thành trình xử lý với
$ set_level.py This is a warning message This is an error message This is a critical message33
$ set_level.py This is a warning message This is an error message This is a critical message65
Trình xử lý được thêm vào bộ ghi với
$ set_level.py This is a warning message This is an error message This is a critical message32
$ set_level.py This is a warning message This is an error message This is a critical message66
Đây là những thông điệp tường trình bằng văn bản
Chi tiết ghi nhật ký có thể được xác định trong tệp cấu hình YAML. YAML là ngôn ngữ tuần tự hóa dữ liệu mà con người có thể đọc được. Nó thường được sử dụng cho các tập tin cấu hình
$ set_level.py This is a warning message This is an error message This is a critical message67
Chúng ta cần cài đặt mô-đun
$ set_level.py This is a warning message This is an error message This is a critical message004
$ set_level.py This is a warning message This is an error message This is a critical message68
Trong tệp cấu hình, chúng tôi đã xác định nhiều trình định dạng, trình xử lý và trình ghi nhật ký khác nhau. Tùy chọn
$ set_level.py This is a warning message This is an error message This is a critical message005 ngăn việc lan truyền các thông điệp tường trình tới các bộ ghi chính; . Nếu không, các tin nhắn sẽ được nhân đôi
$ set_level.py This is a warning message This is an error message This is a critical message69
Trong ví dụ này, chúng tôi đọc tệp cấu hình và sử dụng trình ghi nhật ký
$ set_level.py This is a warning message This is an error message This is a critical message006
$ set_level.py This is a warning message This is an error message This is a critical message0
Khi chúng tôi chạy chương trình, có hai thông báo trên bàn điều khiển. Trình xử lý bảng điều khiển sử dụng trình định dạng đơn giản với ít thông tin hơn
$ set_level.py This is a warning message This is an error message This is a critical message1
Có các thông điệp bản ghi bên trong tệp
$ set_level.py This is a warning message This is an error message This is a critical message29. Chúng được tạo bởi bộ định dạng mở rộng với nhiều thông tin hơn