def log_to_file[self, message, mes_type, module]: try: # Write to file with codecs.open[self.log_file, "a", encoding='utf-8'] as logfile: if self.csv: logfile.write[self.Format[self.FILE_CSV, u"{0},{1},{2},{3},{4}{5}", getSyslogTimestamp[], self.hostname, mes_type, module, message, self.linesep]] else: logfile.write[self.Format[self.FILE_LINE, u"{0} {1} LOKI: {2}: MODULE: {3} MESSAGE: {4}{5}", getSyslogTimestamp[], self.hostname, mes_type.title[], module, message, self.linesep]] except Exception as e: if self.debug: traceback.print_exc[] sys.exit[1] print["Cannot print line to log file {0}".format[self.log_file]]
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 người ghi nhật ký 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, thì 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 đều đượ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, thì 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
$ set_level.py This is a warning message This is an error message This is a critical message01, mức được đặt thành
$ set_level.py This is a warning message This is an error message This is a critical message02. Nếu mức ghi nhật ký không được đặt rõ ràng với
$ set_level.py This is a warning message This is an error message This is a critical message03, thì các thông báo sẽ được gửi đến cha mẹ của trình 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
$ set_level.py This is a warning message This is an error message This is a critical message02 hoặc đạt đến gốc. Bộ ghi gốc có mức _______14 mặc định được đặt
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
$ set_level.py This is a warning message This is an error message This is a critical message06. Gọi hàm không có tên [
$ set_level.py This is a warning message This is an error message This is a critical message01] trả về bộ ghi gốc
Trình ghi gốc luôn có một mức rõ ràng được đặt, theo mặc định là _______14
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
$ set_level.py This is a warning message This is an error message This is a critical message09 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 message9
Ví dụ gọi năm phương thức của mô-đun
$ set_level.py This is a warning message This is an error message This is a critical message09. 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 message1
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
$ set_level.py This is a warning message This is an error message This is a critical message03. 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 message32. 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 message32 sẽ bị bỏ qua
$ set_level.py This is a warning message This is an error message This is a critical message5
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 message34
$ set_level.py This is a warning message This is an error message This is a critical message7
$ set_level.py This is a warning message This is an error message This is a critical message01 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 message36, 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ý
$ set_level.py This is a warning message This is an error message This is a critical message0
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 message3
Cấp độ của
$ set_level.py This is a warning message This is an error message This is a critical message37 không được đặt;
$ set_level.py This is a warning message This is an error message This is a critical message4
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 message5
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 message6
$ set_level.py This is a warning message This is an error message This is a critical message38 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 message39
$ set_level.py This is a warning message This is an error message This is a critical message10
$ set_level.py This is a warning message This is an error message This is a critical message40 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 message41 được sử dụng
$ set_level.py This is a warning message This is an error message This is a critical message11
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 message42
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 message12
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 message13
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 message14
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 message43
$ set_level.py This is a warning message This is an error message This is a critical message15
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 message44 đị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 message45,
$ set_level.py This is a warning message This is an error message This is a critical message46,
$ 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 message48 và
$ set_level.py This is a warning message This is an error message This is a critical message49 gọi
$ set_level.py This is a warning message This is an error message This is a critical message44 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 message16
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 message44
$ set_level.py This is a warning message This is an error message This is a critical message17
Với
$ set_level.py This is a warning message This is an error message This is a critical message52, 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 message53 xác định những gì được ghi vào tệp; . Với ________ 354, 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 message18
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 message39
$ set_level.py This is a warning message This is an error message This is a critical message56 đọ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 message19
$ set_level.py This is a warning message This is an error message This is a critical message57 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 message50
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 message57
$ set_level.py This is a warning message This is an error message This is a critical message51
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 message52
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 message53
Đâ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 message59. 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 message60, 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 message54
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 message55
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 message59
$ set_level.py This is a warning message This is an error message This is a critical message56
Tùy chọn
$ set_level.py This is a warning message This is an error message This is a critical message60 đị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 message57
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 message63
$ set_level.py This is a warning message This is an error message This is a critical message58
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 message59
Dấu vết ngăn xếp được bao gồm trong 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 message63 thành
$ set_level.py This is a warning message This is an error message This is a critical message65
$ set_level.py This is a warning message This is an error message This is a critical message70
Dấu vết ngăn xếp được bao gồm trong nhật ký
$ set_level.py This is a warning message This is an error message This is a critical message01 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 message67
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 message71
Ví dụ tạo một logger mới với
$ set_level.py This is a warning message This is an error message This is a critical message01. 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 message72
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 message73
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 message101
$ set_level.py This is a warning message This is an error message This is a critical message74
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 message43
$ set_level.py This is a warning message This is an error message This is a critical message75
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 message42
$ set_level.py This is a warning message This is an error message This is a critical message76
Đâ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 message77
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 message104
$ set_level.py This is a warning message This is an error message This is a critical message78
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 message105 ngăn việc 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 message79
Trong ví dụ này, chúng tôi đọc tệp cấu hình và sử dụng bộ ghi nhật ký
$ set_level.py This is a warning message This is an error message This is a critical message106
$ 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 message39. Chúng được tạo bởi bộ định dạng mở rộng với nhiều thông tin hơn