Ghi nhật ký Python vào tệp

Mô-đun ghi nhật ký tích hợp của Python được thiết kế để cung cấp cho bạn khả năng hiển thị quan trọng đối với các ứng dụng của bạn với thiết lập tối thiểu. Cho dù bạn mới bắt đầu hay đã sử dụng mô-đun ghi nhật ký của Python, hướng dẫn này sẽ chỉ cho bạn cách định cấu hình mô-đun này để ghi lại tất cả dữ liệu bạn cần, định tuyến dữ liệu đó đến đích mong muốn và tập trung nhật ký của bạn để hiểu sâu hơn về Python của bạn . Trong bài đăng này, chúng tôi sẽ chỉ cho bạn cách

  • Tùy chỉnh mức độ ưu tiên và đích đến của nhật ký của bạn
  • Định cấu hình thiết lập tùy chỉnh liên quan đến nhiều trình ghi nhật ký và đích đến
  • Kết hợp xử lý ngoại lệ và truy nguyên trong nhật ký của bạn
  • Định dạng nhật ký của bạn ở dạng JSON và tập trung hóa chúng để khắc phục sự cố hiệu quả hơn

Khái niệm cơ bản về mô-đun ghi nhật ký của Python

Mô-đun

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
9 được bao gồm trong thư viện chuẩn của Python, có nghĩa là bạn có thể bắt đầu sử dụng nó mà không cần cài đặt bất cứ thứ gì. Phương pháp
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
8 của mô-đun ghi nhật ký là cách nhanh nhất để định cấu hình hành vi mong muốn của thiết bị ghi nhật ký của bạn. Tuy nhiên, tài liệu Python khuyên bạn nên tạo trình ghi nhật ký cho từng mô-đun trong ứng dụng của mình—và có thể khó định cấu hình thiết lập trình ghi nhật ký cho mỗi mô-đun chỉ bằng cách sử dụng
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
8. Do đó, hầu hết các ứng dụng [bao gồm các khung web như Django] sẽ tự động sử dụng cấu hình ghi nhật ký dựa trên tệp hoặc dựa trên từ điển để thay thế. Nếu bạn muốn bắt đầu với một trong những phương pháp đó, chúng tôi khuyên bạn nên chuyển thẳng đến phần đó

Ba trong số các tham số chính của

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
8 là

  • cấp độ. mức độ ưu tiên tối thiểu của tin nhắn để đăng nhập. Theo thứ tự tăng dần mức độ nghiêm trọng, các cấp nhật ký có sẵn là. GỠ LỖI, THÔNG TIN, CẢNH BÁO, LỖI và TUYỆT VỜI. Theo mặc định, mức được đặt thành CẢNH BÁO, nghĩa là mô-đun ghi nhật ký của Python sẽ lọc ra mọi thông báo GỠ LỖI hoặc THÔNG TIN
  • xử lý. xác định nơi định tuyến nhật ký của bạn. Trừ khi bạn chỉ định khác, thư viện ghi nhật ký sẽ sử dụng
    logger = logging.getLogger[__name__]
    
    3 để chuyển thông điệp tường trình tới
    logger = logging.getLogger[__name__]
    
    4 [thường là bảng điều khiển]
  • định dạng. theo mặc định, thư viện ghi nhật ký sẽ ghi các thông báo ở định dạng sau.
    logger = logging.getLogger[__name__]
    
    5. Trong phần sau, chúng tôi sẽ chỉ cho bạn cách tùy chỉnh phần này để bao gồm dấu thời gian và thông tin khác hữu ích cho việc khắc phục sự cố

Vì mô-đun ghi nhật ký chỉ ghi lại CẢNH BÁO và nhật ký cấp cao hơn theo mặc định, nên bạn có thể thiếu khả năng hiển thị đối với các nhật ký có mức độ ưu tiên thấp hơn có thể hữu ích để tiến hành phân tích nguyên nhân gốc rễ. Mô-đun ghi nhật ký cũng truyền nhật ký tới bảng điều khiển thay vì nối chúng vào một tệp. Thay vì sử dụng

logger = logging.getLogger[__name__]
3 hoặc
logger = logging.getLogger[__name__]
7 để truyền trực tiếp nhật ký tới bảng điều khiển hoặc tới một dịch vụ bên ngoài qua mạng, bạn nên sử dụng
logger = logging.getLogger[__name__]
8 để ghi nhật ký vào một hoặc nhiều tệp trên đĩa

Một ưu điểm chính của việc ghi nhật ký vào tệp là ứng dụng của bạn không cần tính đến khả năng gặp phải các lỗi liên quan đến mạng trong khi truyền nhật ký đến đích bên ngoài. Nếu nó gặp bất kỳ sự cố nào với nhật ký phát trực tuyến qua mạng, bạn sẽ không mất quyền truy cập vào các nhật ký đó vì chúng sẽ được lưu trữ cục bộ trên mỗi máy chủ. Việc ghi nhật ký vào một tệp cũng cho phép bạn tạo một thiết lập ghi nhật ký tùy chỉnh hơn, nơi bạn có thể định tuyến các loại nhật ký khác nhau tới các tệp riêng biệt, đồng thời theo dõi và tập trung các tệp đó bằng dịch vụ giám sát nhật ký

Trong phần tiếp theo, chúng tôi sẽ chỉ cho bạn cách dễ dàng tùy chỉnh

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
8 để ghi nhật ký các thư có mức độ ưu tiên thấp hơn và hướng chúng tới một tệp trên đĩa

Một ví dụ về
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
8

Ví dụ sau sử dụng

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
8 để định cấu hình ứng dụng ghi GỠ LỖI và các thông báo cấp cao hơn vào một tệp trên đĩa [myapp. nhật ký]. Nó cũng chỉ ra rằng nhật ký phải tuân theo định dạng bao gồm dấu thời gian và mức độ nghiêm trọng của nhật ký

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
3

Nếu bạn chạy mã trên một tệp có thể truy cập [e. g. , tập tin của tôi. txt] theo sau là một tệp không thể truy cập được [e. g. , tập tin không tồn tại. txt], nó sẽ nối các nhật ký sau vào myapp. tệp nhật ký

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file

Nhờ cấu hình

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
8 mới, nhật ký mức GỠ LỖI không còn bị lọc ra nữa và nhật ký tuân theo định dạng tùy chỉnh bao gồm các thuộc tính sau

  • 2019-03-27 10:49:00,979 DEBUG:this file has 44 words
    2019-03-27 10:49:00,979 ERROR:error reading the file
    
    63. hiển thị ngày và giờ của nhật ký, theo giờ địa phương
  • 2019-03-27 10:49:00,979 DEBUG:this file has 44 words
    2019-03-27 10:49:00,979 ERROR:error reading the file
    
    64. mức ghi nhật ký của tin nhắn
  • 2019-03-27 10:49:00,979 DEBUG:this file has 44 words
    2019-03-27 10:49:00,979 ERROR:error reading the file
    
    65. thông điệp

Xem tài liệu để biết thông tin về các thuộc tính mà bạn có thể đưa vào định dạng của mỗi bản ghi nhật ký. Trong ví dụ trên, một thông báo lỗi đã được ghi lại, nhưng nó không bao gồm bất kỳ thông tin truy nguyên ngoại lệ nào, gây khó khăn cho việc xác định nguồn gốc của vấn đề. Trong phần sau của bài đăng này, chúng tôi sẽ chỉ cho bạn cách ghi nhật ký truy xuất đầy đủ khi xảy ra ngoại lệ

Tìm hiểu sâu hơn về thư viện ghi nhật ký của Python

Chúng tôi đã đề cập đến những điều cơ bản của

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
8, nhưng như đã đề cập trước đó, hầu hết các ứng dụng sẽ được hưởng lợi từ việc triển khai thiết lập bộ ghi trên mỗi mô-đun. Khi ứng dụng của bạn mở rộng quy mô, bạn sẽ cần một cách mạnh mẽ hơn, có thể mở rộng để định cấu hình từng trình ghi nhật ký dành riêng cho mô-đun—và để đảm bảo rằng bạn đang nắm bắt tên trình ghi nhật ký như một phần của mỗi nhật ký. Trong phần này, chúng ta sẽ khám phá cách

  • cấu hình nhiều logger và tự động lấy tên logger
  • sử dụng
    2019-03-27 10:49:00,979 DEBUG:this file has 44 words
    2019-03-27 10:49:00,979 ERROR:error reading the file
    
    67 để triển khai các tùy chọn định tuyến và định dạng tùy chỉnh
  • nắm bắt truy nguyên và ngoại lệ chưa được phát hiện

Định cấu hình nhiều logger và nắm bắt tên logger

Để làm theo phương pháp hay nhất về tạo trình ghi nhật ký mới cho từng mô-đun trong ứng dụng của bạn, hãy sử dụng phương pháp

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
68 tích hợp sẵn của thư viện ghi nhật ký để tự động đặt tên trình ghi nhật ký khớp với tên mô-đun của bạn

logger = logging.getLogger[__name__]

Phương thức

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
68 này đặt tên logger thành
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
40, tương ứng với tên đủ điều kiện của mô-đun mà từ đó phương thức này được gọi. Điều này cho phép bạn xem chính xác mô-đun nào trong ứng dụng của bạn đã tạo ra từng thông báo nhật ký, vì vậy bạn có thể diễn giải nhật ký của mình rõ ràng hơn

Ví dụ: nếu ứng dụng của bạn bao gồm một mô-đun thấp hơn. mô-đun py được gọi từ mô-đun khác, mô-đun trên. py, phương thức

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
68 sẽ đặt tên nhật ký khớp với mô-đun được liên kết. Sau khi bạn sửa đổi định dạng nhật ký của mình để bao gồm tên trình ghi nhật ký [
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
42], bạn sẽ thấy thông tin này trong mọi thông báo nhật ký. Bạn có thể xác định bộ ghi trong mỗi mô-đun như thế này

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
6

Nếu chúng ta chạy mô-đun trên. py trên một tệp có thể truy cập [myfile. txt] theo sau là một tệp không thể truy cập được [tệp không tồn tại. txt], mô-đun ghi nhật ký sẽ tạo đầu ra sau

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
4

Tên nhật ký được bao gồm ngay sau dấu thời gian, vì vậy bạn có thể biết chính xác mô-đun nào đã tạo mỗi thông báo. Nếu bạn không xác định trình ghi nhật ký bằng

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
68, thì mỗi tên trình ghi nhật ký sẽ hiển thị dưới dạng
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
44, gây khó khăn cho việc phân biệt thư nào được ghi bởi
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
45 so với
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
46. Tin nhắn đã được ghi lại từ uppermodule. py liệt kê mô-đun
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
47 làm tên nhật ký, bởi vì mô-đun trên. py đã được thực thi dưới dạng tập lệnh cấp cao nhất

Mặc dù chúng tôi hiện đang tự động nắm bắt tên trình ghi nhật ký như một phần của định dạng nhật ký, nhưng cả hai trình ghi nhật ký này đều được định cấu hình với cùng một dòng

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
8. Trong phần tiếp theo, chúng tôi sẽ chỉ cho bạn cách hợp lý hóa cấu hình ghi nhật ký của bạn bằng cách sử dụng
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
67 để áp dụng cấu hình ghi nhật ký trên nhiều thiết bị ghi nhật ký

Sử dụng fileConfig[] để xuất nhật ký tới nhiều đích

Mặc dù

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
8 giúp bắt đầu ghi nhật ký nhanh chóng và dễ dàng, nhưng việc sử dụng cấu hình dựa trên tệp [
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
67] hoặc dựa trên từ điển [
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
82] cho phép bạn triển khai nhiều tùy chọn định tuyến và định dạng tùy chỉnh hơn cho mỗi trình ghi nhật ký trong ứng dụng của mình và định tuyến nhật ký tới nhiều . Đây cũng là mô hình mà các framework phổ biến như Django và Flask sử dụng để định cấu hình ghi nhật ký ứng dụng. Trong phần này, chúng ta sẽ xem xét kỹ hơn cách thiết lập cấu hình ghi nhật ký dựa trên tệp. Tệp cấu hình ghi nhật ký cần chứa ba phần

  • [Người khai thác gỗ]. tên của các logger bạn sẽ cấu hình
  • [xử lý]. [những] người xử lý những
    2019-03-27 10:49:00,979 DEBUG:this file has 44 words
    2019-03-27 10:49:00,979 ERROR:error reading the file
    
    83 này nên sử dụng [e. g. ,
    2019-03-27 10:49:00,979 DEBUG:this file has 44 words
    2019-03-27 10:49:00,979 ERROR:error reading the file
    
    84,
    2019-03-27 10:49:00,979 DEBUG:this file has 44 words
    2019-03-27 10:49:00,979 ERROR:error reading the file
    
    85]
  • [bộ định dạng]. [các] định dạng bạn muốn mỗi trình ghi nhật ký tuân theo khi tạo nhật ký

Mỗi phần phải bao gồm một danh sách được phân tách bằng dấu phẩy gồm một hoặc nhiều khóa.

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
86. Các phím xác định tên của các phần khác mà bạn sẽ cần định cấu hình, được định dạng là
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
87, trong đó tên phần là trình ghi nhật ký, trình xử lý hoặc trình định dạng. Tệp cấu hình ghi nhật ký mẫu [ghi nhật ký. ini] được hiển thị bên dưới

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
8

Tài liệu ghi nhật ký của Python khuyên bạn chỉ nên đính kèm mỗi trình xử lý vào một trình ghi nhật ký và dựa vào sự lan truyền để áp dụng trình xử lý cho các trình ghi nhật ký con thích hợp. Điều này có nghĩa là nếu bạn có cấu hình ghi nhật ký mặc định mà bạn muốn tất cả các trình ghi nhật ký của mình nhận, thì bạn nên thêm cấu hình đó vào trình ghi nhật ký gốc [chẳng hạn như trình ghi nhật ký gốc], thay vì áp dụng nó cho từng trình ghi nhật ký cấp thấp hơn. Xem tài liệu để biết thêm chi tiết về nhân giống. Trong ví dụ này, chúng tôi đã định cấu hình trình ghi nhật ký gốc và để nó truyền tới cả hai mô-đun trong ứng dụng của chúng tôi [

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
46 và
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
45]. Cả hai bộ ghi sẽ xuất các bản ghi GỠ LỖI và các bản ghi có mức độ ưu tiên cao hơn, ở định dạng đã chỉ định [
logger = logging.getLogger[__name__]
70] và nối chúng vào một tệp nhật ký [tệp. nhật ký]. Điều này loại bỏ nhu cầu bao gồm
logger = logging.getLogger[__name__]
71 trong cả hai mô-đun

Thay vào đó, khi bạn đã tạo tệp cấu hình ghi nhật ký này, bạn có thể thêm

logger = logging.getLogger[__name__]
72 vào mã của mình như sau

logger = logging.getLogger[__name__]
7

Đảm bảo

logger = logging.getLogger[__name__]
73 để bạn có quyền truy cập vào chức năng
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
67. Trong ví dụ này,
logger = logging.getLogger[__name__]
75 được đặt thành
logger = logging.getLogger[__name__]
76, cho biết rằng mô-đun ghi nhật ký không được vô hiệu hóa các trình ghi nhật ký không phải root đã tồn tại trước đó. Cài đặt này mặc định là
logger = logging.getLogger[__name__]
77, điều này sẽ vô hiệu hóa mọi trình ghi nhật ký không phải root đã tồn tại trước
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
67 trừ khi bạn định cấu hình chúng sau đó

Ứng dụng của bạn bây giờ sẽ bắt đầu ghi nhật ký dựa trên cấu hình bạn đã thiết lập trong quá trình ghi nhật ký của mình. tập tin ini. Bạn cũng có tùy chọn định cấu hình ghi nhật ký dưới dạng từ điển Python [thông qua

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
82], thay vì trong tệp. Xem tài liệu để biết thêm chi tiết về cách sử dụng
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
67 và
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
82

Xử lý ngoại lệ Python và truy nguyên

Ghi nhật ký truy nguyên vào nhật ký ngoại lệ của bạn có thể rất hữu ích cho việc khắc phục sự cố. Như chúng ta đã thấy trước đó, theo mặc định,

logger = logging.getLogger[__name__]
02 không bao gồm bất kỳ thông tin truy nguyên nào—nó sẽ chỉ ghi nhật ký ngoại lệ dưới dạng lỗi mà không cung cấp bất kỳ ngữ cảnh bổ sung nào. Để đảm bảo rằng
logger = logging.getLogger[__name__]
02 ghi lại truy nguyên, hãy đặt tham số
logger = logging.getLogger[__name__]
04 thành
logger = logging.getLogger[__name__]
77. Để minh họa, hãy thử ghi lại một ngoại lệ có và không có
logger = logging.getLogger[__name__]
06

logger = logging.getLogger[__name__]
0

Nếu bạn chạy mã với tệp không thể truy cập được [e. g. , tập tin không tồn tại. txt] làm đầu vào, nó sẽ tạo đầu ra sau

logger = logging.getLogger[__name__]
6

Dòng đầu tiên, được ghi bởi

logger = logging.getLogger[__name__]
07, không cung cấp nhiều ngữ cảnh ngoài thông báo lỗi [“Không có tệp hoặc thư mục như vậy”]. Dòng thứ hai cho biết cách thêm
logger = logging.getLogger[__name__]
08 vào
logger = logging.getLogger[__name__]
07 cho phép bạn nắm bắt loại ngoại lệ [
logger = logging.getLogger[__name__]
60] và truy nguyên, bao gồm thông tin về chức năng và số dòng nơi ngoại lệ này được nêu ra

Ngoài ra, bạn cũng có thể sử dụng

logger = logging.getLogger[__name__]
61 để ghi nhật ký ngoại lệ từ trình xử lý ngoại lệ [chẳng hạn như trong mệnh đề
logger = logging.getLogger[__name__]
62]. Thao tác này sẽ tự động ghi lại cùng một thông tin theo dõi được hiển thị ở trên và đặt LỖI làm mức độ ưu tiên của nhật ký mà không yêu cầu bạn đặt rõ ràng
logger = logging.getLogger[__name__]
06 thành
logger = logging.getLogger[__name__]
77. Bất kể bạn sử dụng phương pháp nào để ghi lại dấu vết, việc có sẵn thông tin ngoại lệ đầy đủ trong nhật ký của bạn là rất quan trọng để theo dõi và khắc phục sự cố hiệu suất của các ứng dụng của bạn

Nắm bắt các ngoại lệ chưa được xử lý

Bạn sẽ không bao giờ có thể lường trước và xử lý mọi ngoại lệ có thể xảy ra, nhưng bạn có thể đảm bảo rằng mình ghi nhật ký các ngoại lệ chưa được phát hiện để bạn có thể điều tra chúng sau này. Một ngoại lệ chưa được xử lý xảy ra bên ngoài khối

logger = logging.getLogger[__name__]
65 hoặc khi bạn không đưa loại ngoại lệ chính xác vào câu lệnh
logger = logging.getLogger[__name__]
62 của mình. Chẳng hạn, nếu ứng dụng của bạn gặp ngoại lệ
logger = logging.getLogger[__name__]
67 và mệnh đề
logger = logging.getLogger[__name__]
62 của bạn chỉ xử lý một
logger = logging.getLogger[__name__]
69, nó sẽ được chuyển đến bất kỳ mệnh đề
logger = logging.getLogger[__name__]
00 còn lại nào cho đến khi gặp đúng loại ngoại lệ

Nếu không, nó sẽ trở thành một ngoại lệ chưa được xử lý, trong trường hợp đó, trình thông dịch sẽ gọi

logger = logging.getLogger[__name__]
01, với ba đối số. lớp ngoại lệ, trường hợp ngoại lệ và truy nguyên. Thông tin này thường xuất hiện trong
logger = logging.getLogger[__name__]
4 nhưng nếu bạn đã định cấu hình trình ghi nhật ký của mình để xuất thành tệp, thông tin truy nguyên sẽ không được ghi vào đó

Bạn có thể sử dụng thư viện

logger = logging.getLogger[__name__]
03 tiêu chuẩn của Python để định dạng truy nguyên và đưa nó vào thông báo tường trình. Hãy sửa lại hàm
logger = logging.getLogger[__name__]
04 của chúng ta để nó thử ghi số từ vào tệp. Vì chúng tôi đã cung cấp sai số lượng đối số trong hàm
logger = logging.getLogger[__name__]
05, nó sẽ đưa ra một ngoại lệ

logger = logging.getLogger[__name__]
0

Chạy mã này sẽ gặp một ngoại lệ

logger = logging.getLogger[__name__]
67 không được xử lý trong logic thử ngoại trừ. Tuy nhiên, vì chúng tôi đã thêm mã
logger = logging.getLogger[__name__]
03, nó sẽ được ghi lại, nhờ mã truy nguyên có trong mệnh đề
logger = logging.getLogger[__name__]
62 thứ hai

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
0

Ghi nhật ký toàn bộ quá trình truy nguyên trong mỗi ngoại lệ được xử lý và chưa được xử lý cung cấp khả năng hiển thị quan trọng đối với các lỗi khi chúng xảy ra trong thời gian thực, để bạn có thể điều tra khi nào và tại sao chúng xảy ra. Mặc dù các ngoại lệ nhiều dòng rất dễ đọc nhưng nếu bạn đang tổng hợp nhật ký của mình bằng dịch vụ ghi nhật ký bên ngoài, bạn sẽ muốn chuyển đổi nhật ký của mình thành JSON để đảm bảo rằng nhật ký nhiều dòng của bạn được phân tích cú pháp chính xác. Tiếp theo, chúng tôi sẽ chỉ cho bạn cách sử dụng thư viện như

logger = logging.getLogger[__name__]
09 để đăng nhập ở định dạng JSON

Hợp nhất tất cả nhật ký Python của bạn

Cho đến nay, chúng tôi đã chỉ cho bạn cách định cấu hình thư viện ghi nhật ký tích hợp sẵn của Python, tùy chỉnh định dạng và mức độ nghiêm trọng của nhật ký, đồng thời thu thập thông tin hữu ích như tên trình ghi nhật ký và truy nguyên ngoại lệ. Chúng tôi cũng đã sử dụng cấu hình dựa trên tệp để triển khai các tùy chọn định tuyến và định dạng nhật ký động hơn. Giờ đây, chúng tôi có thể chuyển sự chú ý của mình sang việc giải thích và phân tích tất cả dữ liệu mà chúng tôi đang thu thập. Trong phần này, chúng tôi sẽ chỉ cho bạn cách định dạng nhật ký trong JSON, thêm thuộc tính tùy chỉnh, đồng thời tập trung và phân tích dữ liệu đó bằng giải pháp quản lý nhật ký để hiểu rõ hơn về hiệu suất, lỗi của ứng dụng, v.v.

Hợp lý hóa việc thu thập và phân tích nhật ký Python của bạn với Datadog

Dùng thử miễn phí

Đăng nhập định dạng JSON

Khi hệ thống của bạn tạo ra nhiều nhật ký hơn theo thời gian, việc xác định các nhật ký có thể giúp bạn khắc phục các sự cố cụ thể có thể nhanh chóng trở nên khó khăn—đặc biệt là khi các nhật ký đó được phân phối trên nhiều máy chủ, dịch vụ và tệp. Nếu bạn tập trung nhật ký của mình bằng giải pháp quản lý nhật ký, bạn sẽ luôn biết nơi cần tìm bất cứ khi nào bạn cần tìm kiếm và phân tích nhật ký của mình, thay vì đăng nhập thủ công vào từng máy chủ ứng dụng

Đăng nhập bằng JSON là phương pháp hay nhất khi tập trung nhật ký của bạn bằng dịch vụ quản lý nhật ký, vì máy có thể dễ dàng phân tích cú pháp và phân tích định dạng có cấu trúc, chuẩn này. Định dạng JSON cũng có thể dễ dàng tùy chỉnh để bao gồm bất kỳ thuộc tính nào mà bạn quyết định thêm vào từng định dạng nhật ký, vì vậy, bạn sẽ không cần cập nhật quy trình xử lý nhật ký của mình mỗi khi bạn thêm hoặc xóa một thuộc tính khỏi định dạng nhật ký của mình

Cộng đồng Python đã phát triển nhiều thư viện khác nhau có thể giúp bạn chuyển đổi nhật ký của mình sang định dạng JSON. Đối với ví dụ này, chúng tôi sẽ sử dụng

logger = logging.getLogger[__name__]
09 để chuyển đổi các bản ghi nhật ký thành JSON

Đầu tiên, cài đặt nó trong môi trường của bạn

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
1

Bây giờ hãy cập nhật tệp cấu hình ghi nhật ký [e. g. , đăng nhập. ini] để tùy chỉnh trình định dạng hiện có hoặc thêm trình định dạng mới sẽ định dạng nhật ký ở dạng JSON [

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
01 trong ví dụ bên dưới]. Trình định dạng JSON cần sử dụng lớp
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
02. Trong khóa
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
03 của trình định dạng, bạn có thể chỉ định các thuộc tính mà bạn muốn đưa vào đối tượng JSON của mỗi bản ghi nhật ký

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
2

Nhật ký được gửi tới bảng điều khiển [với

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
84] sẽ vẫn tuân theo định dạng
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
05 để dễ đọc, nhưng nhật ký do trình ghi nhật ký
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
46 tạo ra sẽ được ghi vào ứng dụng của tôi. tệp nhật ký ở định dạng JSON

Khi bạn đã bao gồm lớp

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
02 trong tệp cấu hình ghi nhật ký của mình, hàm
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
67 sẽ có thể tạo
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
09 miễn là bạn chạy mã từ một môi trường nơi nó có thể nhập
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
10

Nếu bạn không sử dụng cấu hình dựa trên tệp, bạn sẽ cần nhập thư viện

logger = logging.getLogger[__name__]
09 vào mã ứng dụng của mình, đồng thời xác định trình xử lý và trình định dạng, như được mô tả trong tài liệu

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
3

Để xem tại sao định dạng JSON lại được ưa chuộng hơn, đặc biệt khi nói đến các bản ghi nhật ký phức tạp hoặc chi tiết hơn, hãy quay lại ví dụ về truy ngược ngoại lệ nhiều dòng mà chúng tôi đã ghi lại trước đó. Nó trông giống như thế này

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
4

Mặc dù nhật ký theo dõi ngoại lệ này dễ đọc trong một tệp hoặc trong bảng điều khiển, nhưng nếu nó được xử lý bởi một nền tảng quản lý nhật ký, thì mỗi dòng có thể hiển thị dưới dạng một nhật ký riêng [trừ khi bạn định cấu hình quy tắc tổng hợp nhiều dòng], điều này có thể gây khó khăn

Bây giờ chúng ta đang ghi nhật ký theo dõi ngoại lệ này trong JSON, ứng dụng sẽ tạo một nhật ký giống như thế này

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
5

Một dịch vụ ghi nhật ký có thể dễ dàng giải thích nhật ký JSON này và hiển thị thông tin theo dõi đầy đủ [bao gồm thuộc tính

logger = logging.getLogger[__name__]
06] ở định dạng dễ đọc

Thêm thuộc tính tùy chỉnh vào nhật ký JSON của bạn

Một lợi ích khác của việc đăng nhập JSON là bạn có thể thêm các thuộc tính mà dịch vụ quản lý nhật ký bên ngoài có thể tự động phân tích cú pháp và phân tích. Trước đó, chúng tôi đã định cấu hình

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
03 để bao gồm các thuộc tính tiêu chuẩn như
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
63,
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
42,
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
64 và
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
65. Bạn cũng có thể ghi lại các thuộc tính tùy chỉnh bằng cách sử dụng trường “bổ sung” của
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
18. Dưới đây, chúng tôi đã tạo một thuộc tính mới theo dõi thời lượng của thao tác này

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
6

Thuộc tính tùy chỉnh này,

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
19, đo khoảng thời gian của thao tác tính bằng giây

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
7

Trong một giải pháp quản lý nhật ký, các thuộc tính của nhật ký JSON này sẽ được phân tích cú pháp thành một thứ giống như sau

Nếu bạn đang sử dụng nền tảng giám sát nhật ký, bạn có thể lập biểu đồ và cảnh báo trên

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
19 của ứng dụng của mình theo thời gian. Bạn cũng có thể xuất biểu đồ này sang trang tổng quan nếu muốn trực quan hóa biểu đồ song song với hiệu suất ứng dụng hoặc số liệu cơ sở hạ tầng

Cho dù bạn đang sử dụng

logger = logging.getLogger[__name__]
09 hay thư viện khác để định dạng nhật ký Python của mình ở dạng JSON, thật dễ dàng tùy chỉnh nhật ký của bạn để bao gồm thông tin mà bạn có thể phân tích bằng nền tảng quản lý nhật ký bên ngoài

Tương quan nhật ký với các nguồn dữ liệu giám sát khác

Khi bạn đang tập trung nhật ký Python của mình bằng dịch vụ giám sát, bạn có thể bắt đầu khám phá chúng cùng với dấu vết yêu cầu được phân phối và số liệu cơ sở hạ tầng để có khả năng hiển thị sâu hơn vào ứng dụng của mình. Một dịch vụ như Datadog có thể kết nối nhật ký với số liệu và dữ liệu giám sát hiệu suất ứng dụng để giúp bạn xem bức tranh toàn cảnh

Ví dụ: nếu bạn cập nhật định dạng nhật ký của mình để bao gồm các thuộc tính

2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
22 và
2019-03-27 10:49:00,979 DEBUG:this file has 44 words
2019-03-27 10:49:00,979 ERROR:error reading the file
23, Datadog sẽ tự động tương quan nhật ký và dấu vết từ từng yêu cầu riêng lẻ. Điều này có nghĩa là khi bạn đang xem theo dõi, bạn chỉ cần nhấp vào tab “Nhật ký” của chế độ xem theo dõi để xem bất kỳ nhật ký nào được tạo trong yêu cầu cụ thể đó, như minh họa bên dưới

Bạn cũng có thể điều hướng theo hướng khác—từ nhật ký đến dấu vết của yêu cầu đã tạo nhật ký—nếu bạn cần điều tra một vấn đề cụ thể. Xem tài liệu của chúng tôi để biết thêm chi tiết về các bản ghi và dấu vết Python tương quan tự động để khắc phục sự cố nhanh hơn

Tập trung và phân tích nhật ký Python của bạn

Trong bài đăng này, chúng tôi đã hướng dẫn một số phương pháp hay nhất để định cấu hình thư viện ghi nhật ký tiêu chuẩn của Python để tạo nhật ký giàu ngữ cảnh, nắm bắt các dấu vết ngoại lệ và định tuyến nhật ký đến đích thích hợp. Chúng tôi cũng đã thấy cách bạn có thể tập trung, phân tích cú pháp và phân tích nhật ký có định dạng JSON của mình bằng nền tảng quản lý nhật ký bất cứ khi nào bạn cần khắc phục sự cố hoặc gỡ lỗi. Nếu bạn muốn theo dõi nhật ký ứng dụng Python của mình bằng Datadog, hãy đăng ký dùng thử miễn phí

Việc sử dụng tệp nhật ký trong Python là gì?

Python có ghi nhật ký mô-đun tích hợp cho phép ghi thông báo trạng thái vào một tệp hoặc bất kỳ luồng đầu ra nào khác . Tệp có thể chứa thông tin về phần nào của mã được thực thi và vấn đề nào đã phát sinh.

Việc đăng nhập bằng Python có sử dụng log4j không?

Mô-đun ghi nhật ký sẵn có trong python yêu cầu một số dòng mã để định cấu hình các tính năng giống log4j như - trình nối tệp, xoay tệp dựa trên cả thời gian và kích thước . Để triển khai một lớp các tính năng trong mã của bạn, bạn có thể sử dụng gói autopylogger.

Năm cấp độ đăng nhập trong Python là gì?

Python có sáu cấp độ nhật ký với mỗi cấp độ được gán một số nguyên cụ thể cho biết mức độ nghiêm trọng của nhật ký. .
KHÔNG ĐẶT = 0
GỠ LỖI=10
THÔNG TIN=20
CẢNH BÁO=30
LỖI=40
TIÊU CHÍ = 50

Làm cách nào để tạo tệp nhật ký mới cho mỗi lần ứng dụng chạy bằng Python?

Làm cách nào để tạo tệp nhật ký mới mỗi khi ứng dụng chạy? .
chạy với logger. gỡ lỗi ["test1"] - ví dụ. nhật ký sẽ chứa test1 gấp 10 lần như bình thường
chạy với logger. debug["test2"] - nó viết lại ví dụ. log để chứa test2 10 lần
vân vân

Chủ Đề