Trình ghi nhật ký Python xuất ra ở đâu?

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 message
2 là cha của
$ set_level.py
This is a warning message
This is an error message
This is a critical message
3

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

  • BẠO KÍCH
  • 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 message
4, 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 message
4,
$ set_level.py
This is a warning message
This is an error message
This is a critical message
6 và
$ set_level.py
This is a warning message
This is an error message
This is a critical message
7 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 message
6, chỉ các tin nhắn
$ set_level.py
This is a warning message
This is an error message
This is a critical message
6 và
$ set_level.py
This is a warning message
This is an error message
This is a critical message
7 đượ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, thì các thông báo sẽ được gửi đến 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 message
4 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 message
4

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 message
8

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 message
0

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 message
22. 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 message
22 sẽ bị bỏ qua

$ set_level.py
This is a warning message
This is an error message
This is a critical message
4

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 message
24

$ set_level.py
This is a warning message
This is an error message
This is a critical message
6

#!/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 message
26, 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 message
2

Cấp độ của

$ set_level.py
This is a warning message
This is an error message
This is a critical message
27 không được đặt;

$ set_level.py
This is a warning message
This is an error message
This is a critical message
3

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 message
4

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 message
5

$ set_level.py
This is a warning message
This is an error message
This is a critical message
28 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 message
29

$ set_level.py
This is a warning message
This is an error message
This is a critical message
00

$ set_level.py
This is a warning message
This is an error message
This is a critical message
30 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 message
31 được sử dụng

$ set_level.py
This is a warning message
This is an error message
This is a critical message
01

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 message
32

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 message
02

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 message
03

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 message
04

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 message
33

$ set_level.py
This is a warning message
This is an error message
This is a critical message
05

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 message
34 đị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 message
35,
$ set_level.py
This is a warning message
This is an error message
This is a critical message
36,
$ set_level.py
This is a warning message
This is an error message
This is a critical message
37,
$ set_level.py
This is a warning message
This is an error message
This is a critical message
38 và
$ set_level.py
This is a warning message
This is an error message
This is a critical message
39 gọi
$ set_level.py
This is a warning message
This is an error message
This is a critical message
34 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 message
06

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 message
34

$ set_level.py
This is a warning message
This is an error message
This is a critical message
07

Với

$ set_level.py
This is a warning message
This is an error message
This is a critical message
42, 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 message
43 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 message
08

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 message
29

$ set_level.py
This is a warning message
This is an error message
This is a critical message
46 đọ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 message
09

$ set_level.py
This is a warning message
This is an error message
This is a critical message
47 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 message
40

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 message
47

$ set_level.py
This is a warning message
This is an error message
This is a critical message
41

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 message
42

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 message
43

Đâ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 message
49. 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 message
50, 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 message
44

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 message
45

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 message
49

$ set_level.py
This is a warning message
This is an error message
This is a critical message
46

Tùy chọn

$ set_level.py
This is a warning message
This is an error message
This is a critical message
50 đị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 message
47

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 message
53

$ set_level.py
This is a warning message
This is an error message
This is a critical message
48

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 message
49

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 message
53 thành
$ set_level.py
This is a warning message
This is an error message
This is a critical message
55

$ set_level.py
This is a warning message
This is an error message
This is a critical message
60

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 message
57

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 message
61

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 message
62

Một bộ ghi có tên

$ set_level.py
This is a warning message
This is an error message
This is a critical message
2 được tạo;

$ set_level.py
This is a warning message
This is an error message
This is a critical message
63

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 message
001

$ set_level.py
This is a warning message
This is an error message
This is a critical message
64

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 message
33

$ set_level.py
This is a warning message
This is an error message
This is a critical message
65

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 message
32

$ set_level.py
This is a warning message
This is an error message
This is a critical message
66

Đâ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 có thể đọc được của con người. 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 message
67

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 message
004

$ set_level.py
This is a warning message
This is an error message
This is a critical message
68

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 message
005 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 message
69

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 message
006

$ set_level.py
This is a warning message
This is an error message
This is a critical message
0

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 message
1

Có các thông điệp tường trình bên trong tệp

$ set_level.py
This is a warning message
This is an error message
This is a critical message
29. Chúng được tạo bởi bộ định dạng mở rộng với nhiều thông tin hơn

Bộ ghi Python có ghi vào thiết bị xuất chuẩn không?

ghi nhật ký - Tạo trình ghi nhật ký Python xuất tất cả thông báo ra thiết bị xuất chuẩn ngoài tệp nhật ký . Stack Overflow for Teams – Bắt đầu cộng tác và chia sẻ kiến ​​thức tổ chức.

Python lưu trữ dữ liệu trong tệp nhật ký như thế nào?

Cách bắt đầu ghi nhật ký tin nhắn bằng Python .
Nhập mô-đun ghi nhật ký
Định cấu hình bộ ghi bằng phương thức basicConfig(). .
Chỉ định tệp mà thông điệp tường trình được gửi
Xác định mức độ “nghiêm trọng” của các thông điệp bản ghi
Định dạng thông điệp bản ghi
Nối thêm hoặc ghi đè lên các thông điệp tường trình trước đó trong tệp