Python yêu cầu đăng nhập vào tệp

Trong thế giới máy tính rộng lớn, có nhiều ngôn ngữ lập trình khác nhau bao gồm các phương tiện để ghi nhật ký. Từ các bài đăng trước của chúng tôi, bạn có thể tìm hiểu các phương pháp hay nhất về ghi nhật ký Node, ghi nhật ký Java và ghi nhật ký Ruby. Là một phần của chuỗi ghi nhật ký đang diễn ra, bài đăng này mô tả những gì bạn cần khám phá về các phương pháp hay nhất về ghi nhật ký Python

Xem xét rằng “nhật ký” có nghĩa kép của một bản ghi nhật ký [đơn] và một tệp nhật ký, bài đăng này giả định rằng “nhật ký” đề cập đến một tệp nhật ký

Ưu điểm của ghi nhật ký Python

Vì vậy, tại sao phải tìm hiểu về cách đăng nhập bằng Python? . Các ưu điểm khác của việc đăng nhập bằng Python là thư viện dành riêng cho mục đích này, các đầu ra khác nhau mà các bản ghi nhật ký có thể được định hướng, chẳng hạn như bảng điều khiển, tệp, tệp xoay vòng, Syslog, máy chủ từ xa, email, v.v. và số lượng lớn các tiện ích mở rộng và plugin mà nó hỗ trợ. Trong bài đăng này, bạn sẽ tìm hiểu các ví dụ về các kết quả đầu ra khác nhau

Mô tả ghi nhật ký Python

Thư viện chuẩn Python cung cấp mô-đun ghi nhật ký như một giải pháp để ghi lại các sự kiện từ các ứng dụng và thư viện. Khi trình ghi được định cấu hình, nó sẽ trở thành một phần của quy trình thông dịch Python đang chạy mã. Nói cách khác, nó là toàn cầu. Bạn cũng có thể định cấu hình hệ thống con ghi nhật ký Python bằng tệp cấu hình bên ngoài. Thông số kỹ thuật cho định dạng cấu hình ghi nhật ký có trong thư viện chuẩn Python

Thư viện ghi nhật ký dựa trên cách tiếp cận mô-đun và bao gồm các danh mục thành phần. trình ghi nhật ký, trình xử lý, bộ lọc và trình định dạng. Về cơ bản

  • 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

Nhiều đối tượng logger này được tổ chức thành một cây đại diện cho các phần khác nhau trong hệ thống của bạn và các thư viện bên thứ ba khác nhau mà bạn đã cài đặt. Khi bạn gửi một tin nhắn vào một trong các trình ghi nhật ký, thì tin nhắn sẽ được xuất ra trên tất cả các trình xử lý của trình ghi nhật ký đó, bằng cách sử dụng một trình định dạng được đính kèm với mỗi trình xử lý. Sau đó, thông báo sẽ truyền lên cây logger cho đến khi gặp bộ ghi gốc hoặc bộ ghi nhật ký trong cây được định cấu hình với propagate=False

Nền tảng ghi nhật ký Python

Đây là một ví dụ về trình ghi nhật ký cơ bản trong Python

import logging

logging.basicConfig[level=logging.DEBUG,
format='%[asctime]s %[levelname]s %[message]s',
      filename='/tmp/myapp.log',
      filemode='w']

logging.debug["Debug message"]

logging.info["Informative message"]

logging.error["Error message"]

Dòng 1. nhập mô-đun đăng nhập

Dòng 2. tạo một hàm basicConf và chuyển một số đối số để tạo tệp nhật ký. Trong trường hợp này, chúng tôi cho biết mức độ nghiêm trọng, định dạng ngày tháng, tên tệp và chế độ tệp để chức năng ghi đè lên tệp nhật ký

Dòng 3 đến 5. thông báo cho từng cấp độ ghi nhật ký

Định dạng mặc định cho bản ghi nhật ký là SEVERITY. TIỀU PHU. THÔNG ĐIỆP. Do đó, nếu bạn chạy mã ở trên, bạn sẽ nhận được kết quả này

2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message

Về đầu ra, bạn có thể đặt đích của thông điệp tường trình. Bước đầu tiên, bạn có thể in thông báo ra màn hình bằng mã mẫu này

import logging
logging.basicConfig[level=logging.DEBUG, format='%[asctime]s - %[levelname]s - %[message]s']
logging.debug['This is a log message.']

Nếu mục tiêu của bạn hướng đến Đám mây, bạn có thể tận dụng bộ xử lý ghi nhật ký của Python để chuyển hướng nội dung. Hiện ở phiên bản beta, bạn có thể ghi nhật ký vào Stackdriver Logging từ các ứng dụng Python bằng cách sử dụng trình xử lý ghi nhật ký Python của Google có trong thư viện ứng dụng Stackdriver Logging hoặc bằng cách sử dụng thư viện ứng dụng để truy cập trực tiếp vào API. Khi phát triển trình ghi nhật ký của bạn, hãy lưu ý rằng trình ghi nhật ký gốc không sử dụng trình xử lý nhật ký của bạn. Vì thư viện Python Client for Stackdriver Logging cũng ghi nhật ký, nên bạn có thể nhận được một vòng lặp đệ quy nếu trình ghi nhật ký gốc sử dụng trình xử lý nhật ký Python của bạn

Các phương pháp hay nhất về ghi nhật ký Python

Khả năng ghi nhật ký Python là vô tận và bạn có thể tùy chỉnh chúng theo nhu cầu của mình. Sau đây là một số mẹo để thực hành tốt nhất về ghi nhật ký ứng dụng web, vì vậy bạn có thể tận dụng tối đa việc ghi nhật ký Python

Đặt tên cấp độ. Điều này hỗ trợ bạn trong việc duy trì từ điển thông điệp tường trình của riêng bạn và giảm khả năng mắc lỗi đánh máy

LogWithLevelName = logging.getLogger['myLoggerSample']
level = logging.getLevelName['INFO']
LogWithLevelName.setLevel[level]

khai thác gỗ. getLevelName[logging_level] trả về biểu diễn văn bản của mức độ nghiêm trọng được gọi là logging_level. Các giá trị được xác định trước bao gồm, từ mức độ nghiêm trọng cao nhất đến thấp nhất

  1. BẠO KÍCH
  2. LỖI
  3. CẢNH BÁO
  4. THÔNG TIN
  5. GỠ LỖI

Đăng nhập từ nhiều mô-đun. nếu bạn có nhiều mô-đun khác nhau và bạn phải thực hiện khởi tạo trong mọi mô-đun trước khi ghi nhật ký thông báo, bạn có thể sử dụng đặt tên trình ghi theo tầng

logging.getLogger[“coralogix”]

logging.getLogger[“coralogix.database”]

logging.getLogger[“coralogix.client”]

Làm san hô. khách hàng và Coralogix. con cháu cơ sở dữ liệu của logger Coralogix và truyền thông điệp của chúng tới nó, do đó nó cho phép ghi nhật ký đa mô-đun dễ dàng. Đây là một trong những tác dụng phụ tích cực của tên trong trường hợp cấu trúc thư viện của các mô-đun phản ánh kiến ​​trúc phần mềm

Đăng nhập bằng Django và uWSGI. Để triển khai các ứng dụng web, bạn có thể sử dụng StreamHandler làm trình ghi nhật ký gửi tất cả nhật ký tới Đối với Django mà bạn có

  'handlers': {

    'stderr': {

        'level': 'INFO',

        'class': 'logging.StreamHandler',

        'formatter': 'your_formatter',

      },

    },

Tiếp theo, uWSGI chuyển tiếp tất cả đầu ra của ứng dụng, bao gồm cả bản in và khả năng truy ngược lại, tới nhật ký hệ thống có đính kèm tên ứng dụng

    $ uwsgi --log-syslog=yourapp …

Đăng nhập với Nginx. Trong trường hợp bạn cần có các tính năng bổ sung không được uWSGI hỗ trợ — ví dụ: cải thiện khả năng xử lý tài nguyên tĩnh [thông qua bất kỳ sự kết hợp nào của tiêu đề Hết hạn hoặc Thẻ điện tử, nén gzip, gzip được nén trước, v.v. ], nhật ký truy cập và định dạng của chúng có thể được tùy chỉnh trong conf. Bạn có thể sử dụng định dạng kết hợp, chẳng hạn như ví dụ cho hệ thống Linux

access_log /var/log/nginx/access.log;

Dòng này tương tự như chỉ định rõ ràng định dạng kết hợp như thế này

________số 8

Phân tích và lọc nhật ký. sau khi viết nhật ký thích hợp, bạn có thể muốn phân tích chúng và thu được thông tin chi tiết hữu ích. Đầu tiên, mở tệp bằng các khối, vì vậy bạn sẽ không phải lo lắng về việc đóng chúng. Hơn nữa, tránh đọc mọi thứ vào bộ nhớ cùng một lúc. Thay vào đó, hãy đọc từng dòng một và sử dụng dòng đó để cập nhật số liệu thống kê tích lũy. Việc sử dụng định dạng nhật ký kết hợp có thể hữu ích nếu bạn đang nghĩ đến việc sử dụng các công cụ phân tích nhật ký vì chúng có các bộ lọc được tạo sẵn để sử dụng các nhật ký này

Nếu bạn cần phân tích đầu ra nhật ký của mình để phân tích, bạn có thể muốn sử dụng mã bên dưới

    with open[logfile, "rb"] as f:

        for line in csv.reader[f, delimiter=' ']:

            self._update[**self._parse[line]]

Mô-đun CSV của Python chứa mã tệp CSV đã đọc và các tệp khác có định dạng tương tự. Bằng cách này, bạn có thể kết hợp thư viện ghi nhật ký của Python để đăng ký nhật ký và thư viện CSV để phân tích chúng

Và tất nhiên, cách Coralogix để ghi nhật ký python, sử dụng ứng dụng bổ sung Coralogix Python cho phép gửi trực tiếp tất cả các nhật ký được viết bằng Python tới Coralogix để tìm kiếm, theo dõi trực tiếp, cảnh báo và tất nhiên, những hiểu biết sâu sắc về máy học như phát hiện lỗi mới và phát hiện sự bất thường của luồng

Tìm hiểu sâu nhật ký Python

Phần còn lại của hướng dẫn này tập trung vào cách đăng nhập Python bằng hỗ trợ ghi nhật ký tích hợp sẵn. Nó giới thiệu các khái niệm khác nhau có liên quan đến việc hiểu ghi nhật ký Python, thảo luận về các API ghi nhật ký tương ứng trong Python và cách sử dụng chúng, đồng thời trình bày các phương pháp hay nhất và cân nhắc về hiệu suất khi sử dụng các API này

Chúng tôi sẽ giới thiệu các khái niệm khác nhau có liên quan để hiểu cách ghi nhật ký trong Python, thảo luận về các API ghi nhật ký tương ứng trong Python và cách sử dụng chúng, đồng thời trình bày các phương pháp hay nhất và cân nhắc về hiệu suất khi sử dụng các API này

Hướng dẫn Python này giả định rằng người đọc đã hiểu rõ về lập trình Python; . Thông tin và các ví dụ ghi nhật ký Python trong bài viết này dựa trên Python phiên bản 3. 8

Python đã cung cấp hỗ trợ tích hợp để ghi nhật ký kể từ phiên bản 2. 3. Hỗ trợ này bao gồm các API thư viện cho các khái niệm và tác vụ phổ biến dành riêng cho ghi nhật ký và ngôn ngữ bất khả tri. Bài viết này giới thiệu các khái niệm và tác vụ này như đã được hiện thực hóa và hỗ trợ trong thư viện ghi nhật ký của Python

Khái niệm ghi nhật ký Python cơ bản

Khi chúng tôi sử dụng thư viện ghi nhật ký, chúng tôi thực hiện/kích hoạt các tác vụ phổ biến sau đây trong khi sử dụng các khái niệm liên quan [được tô đậm]

  1. Một ứng dụng khách đưa ra yêu cầu ghi nhật ký bằng cách thực hiện một câu lệnh ghi nhật ký. Thông thường, các câu lệnh ghi nhật ký như vậy gọi một hàm/phương thức trong API [thư viện] ghi nhật ký bằng cách cung cấp dữ liệu nhật ký và cấp độ ghi nhật ký làm đối số. Mức ghi nhật ký chỉ định tầm quan trọng của yêu cầu nhật ký. Dữ liệu nhật ký thường là một thông báo nhật ký, là một chuỗi, cùng với một số dữ liệu bổ sung sẽ được ghi lại. Thông thường, API ghi nhật ký được hiển thị thông qua đối tượng logger
  2. Để cho phép xử lý một yêu cầu khi nó chạy qua thư viện ghi nhật ký, thư viện ghi nhật ký sẽ tạo một bản ghi nhật ký đại diện cho yêu cầu nhật ký và ghi lại dữ liệu nhật ký tương ứng
  3. Dựa trên cách thư viện ghi nhật ký được định cấu hình [thông qua cấu hình ghi nhật ký], thư viện ghi nhật ký lọc các yêu cầu/bản ghi nhật ký. Quá trình lọc này liên quan đến việc so sánh cấp độ ghi nhật ký được yêu cầu với cấp độ ghi nhật ký ngưỡng và chuyển các bản ghi nhật ký thông qua các bộ lọc do người dùng cung cấp
  4. Trình xử lý xử lý các bản ghi nhật ký đã lọc để lưu trữ dữ liệu nhật ký [e. g. , ghi dữ liệu nhật ký vào một tệp] hoặc thực hiện các hành động khác liên quan đến dữ liệu nhật ký [e. g. , gửi email có dữ liệu nhật ký]. Trong một số thư viện ghi nhật ký, trước khi xử lý các bản ghi nhật ký, trình xử lý có thể lọc lại các bản ghi nhật ký dựa trên cấp độ ghi nhật ký của trình xử lý và các bộ lọc dành riêng cho trình xử lý do người dùng cung cấp. Ngoài ra, khi cần, trình xử lý thường dựa vào trình định dạng do người dùng cung cấp để định dạng bản ghi nhật ký thành chuỗi, tôi. e. , các mục nhật ký

Không phụ thuộc vào thư viện ghi nhật ký, các tác vụ trên được thực hiện theo thứ tự tương tự như trong Hình 1

Hình 1. Luồng tác vụ khi ghi nhật ký qua thư viện ghi nhật ký

Mô-đun ghi nhật ký Python

Thư viện chuẩn của Python cung cấp hỗ trợ ghi nhật ký thông qua ghi nhật ký, ghi nhật ký. cấu hình và ghi nhật ký. mô-đun trình xử lý

  • Mô-đun
    import logging
    logging.basicConfig[level=logging.DEBUG, format='%[asctime]s - %[levelname]s - %[message]s']
    logging.debug['This is a log message.']
    7 cung cấp API hướng tới khách hàng chính
  • Mô-đun
    import logging
    logging.basicConfig[level=logging.DEBUG, format='%[asctime]s - %[levelname]s - %[message]s']
    logging.debug['This is a log message.']
    8 cung cấp API để định cấu hình đăng nhập trong ứng dụng khách
  • Mô-đun
    import logging
    logging.basicConfig[level=logging.DEBUG, format='%[asctime]s - %[levelname]s - %[message]s']
    logging.debug['This is a log message.']
    9 cung cấp các trình xử lý khác nhau bao gồm các cách phổ biến để xử lý và lưu trữ bản ghi nhật ký

Chúng tôi gọi chung các mô-đun này là thư viện ghi nhật ký của Python

Các mô-đun nhật ký Python này hiện thực hóa các khái niệm được giới thiệu trong phần trước dưới dạng các lớp, một tập hợp các hàm cấp mô-đun hoặc một tập hợp các hằng số. Hình 2 cho thấy các lớp này và mối liên hệ giữa chúng

Hình 2. Các lớp và hằng Python đại diện cho các khái niệm ghi nhật ký khác nhau

Cấp độ ghi nhật ký Python

Ra khỏi hộp, thư viện ghi nhật ký Python hỗ trợ năm. nghiêm trọng, lỗi, cảnh báo, thông tin và gỡ lỗi. Các mức này được biểu thị bằng các hằng số có cùng tên trong mô-đun ghi nhật ký, tôi. e. ,

LogWithLevelName = logging.getLogger['myLoggerSample']
level = logging.getLevelName['INFO']
LogWithLevelName.setLevel[level]
0,
LogWithLevelName = logging.getLogger['myLoggerSample']
level = logging.getLevelName['INFO']
LogWithLevelName.setLevel[level]
1,
LogWithLevelName = logging.getLogger['myLoggerSample']
level = logging.getLevelName['INFO']
LogWithLevelName.setLevel[level]
2,
LogWithLevelName = logging.getLogger['myLoggerSample']
level = logging.getLevelName['INFO']
LogWithLevelName.setLevel[level]
3 và
LogWithLevelName = logging.getLogger['myLoggerSample']
level = logging.getLevelName['INFO']
LogWithLevelName.setLevel[level]
4. Giá trị của các hằng số này lần lượt là 50, 40, 30, 20 và 10

Khi chạy, giá trị số của cấp độ ghi nhật ký xác định ý nghĩa của cấp độ ghi nhật ký. Do đó, khách hàng có thể giới thiệu các mức ghi nhật ký mới bằng cách sử dụng các giá trị số lớn hơn 0 và không bằng các mức ghi nhật ký được xác định trước làm mức ghi nhật ký

Mức ghi nhật ký có thể có tên. Khi có tên, các cấp ghi nhật ký sẽ xuất hiện theo tên của chúng trong các mục nhập nhật ký. Mọi cấp độ ghi nhật ký được xác định trước đều có cùng tên với tên của hằng số tương ứng; . g. , cấp độ

LogWithLevelName = logging.getLogger['myLoggerSample']
level = logging.getLevelName['INFO']
LogWithLevelName.setLevel[level]
2 và 30 xuất hiện dưới dạng
LogWithLevelName = logging.getLogger['myLoggerSample']
level = logging.getLevelName['INFO']
LogWithLevelName.setLevel[level]
6. Ngược lại, các mức ghi nhật ký tùy chỉnh được đặt tên theo mặc định. Vì vậy, một cấp độ ghi nhật ký tùy chỉnh chưa được đặt tên với giá trị số
LogWithLevelName = logging.getLogger['myLoggerSample']
level = logging.getLevelName['INFO']
LogWithLevelName.setLevel[level]
7 xuất hiện dưới dạng
LogWithLevelName = logging.getLogger['myLoggerSample']
level = logging.getLevelName['INFO']
LogWithLevelName.setLevel[level]
8 trong các mục nhật ký và điều này dẫn đến các mục nhật ký không nhất quán và không thân thiện với con người. Để giải quyết vấn đề này, khách hàng có thể đặt tên cho cấp độ ghi nhật ký tùy chỉnh bằng chức năng cấp độ mô-đun
LogWithLevelName = logging.getLogger['myLoggerSample']
level = logging.getLevelName['INFO']
LogWithLevelName.setLevel[level]
9. Ví dụ: bằng cách sử dụng
logging.getLogger[“coralogix”]

logging.getLogger[“coralogix.database”]

logging.getLogger[“coralogix.client”]
0, cấp độ
logging.getLogger[“coralogix”]

logging.getLogger[“coralogix.database”]

logging.getLogger[“coralogix.client”]
1 sẽ được ghi là
logging.getLogger[“coralogix”]

logging.getLogger[“coralogix.database”]

logging.getLogger[“coralogix.client”]
2

Thư viện ghi nhật ký Python áp dụng các quy tắc có thể áp dụng trên toàn cộng đồng cho các cấp độ ghi nhật ký, tôi. e. ,

  1. gỡ lỗi. Sử dụng
    LogWithLevelName = logging.getLogger['myLoggerSample']
    level = logging.getLevelName['INFO']
    LogWithLevelName.setLevel[level]
    4 để ghi thông tin chi tiết, thường chỉ được quan tâm khi chẩn đoán sự cố, e. g. , khi ứng dụng bắt đầu
  2. Thông tin. Sử dụng
    LogWithLevelName = logging.getLogger['myLoggerSample']
    level = logging.getLevelName['INFO']
    LogWithLevelName.setLevel[level]
    3 để xác nhận phần mềm đang hoạt động như mong đợi, e. g. , khi ứng dụng khởi chạy thành công
  3. Cảnh báo. Sử dụng
    LogWithLevelName = logging.getLogger['myLoggerSample']
    level = logging.getLevelName['INFO']
    LogWithLevelName.setLevel[level]
    2 để báo cáo các hành vi không mong muốn hoặc là dấu hiệu của các sự cố trong tương lai nhưng không ảnh hưởng đến hoạt động hiện tại của phần mềm, e. g. , khi ứng dụng phát hiện bộ nhớ thấp và điều này có thể ảnh hưởng đến hiệu suất trong tương lai của ứng dụng
  4. Lỗi. Sử dụng
    LogWithLevelName = logging.getLogger['myLoggerSample']
    level = logging.getLevelName['INFO']
    LogWithLevelName.setLevel[level]
    1 để báo cáo phần mềm không thực hiện được một số chức năng, e. g. , khi ứng dụng không lưu được dữ liệu do không đủ quyền
  5. Bạo kích. Sử dụng
    LogWithLevelName = logging.getLogger['myLoggerSample']
    level = logging.getLevelName['INFO']
    LogWithLevelName.setLevel[level]
    0 để báo cáo các lỗi nghiêm trọng có thể ngăn phần mềm tiếp tục thực thi, e. g. , khi ứng dụng không cấp phát bộ nhớ

Máy ghi nhật ký Python

Các đối tượng

logging.getLogger[“coralogix”]

logging.getLogger[“coralogix.database”]

logging.getLogger[“coralogix.client”]
8 cung cấp giao diện chính cho thư viện ghi nhật ký. Các đối tượng này cung cấp các phương thức ghi nhật ký để đưa ra các yêu cầu nhật ký cùng với các phương thức để truy vấn và sửa đổi trạng thái của chúng. Từ đây trở đi, chúng ta sẽ gọi các đối tượng Logger là logger

Sự sáng tạo

Hàm

logging.getLogger[“coralogix”]

logging.getLogger[“coralogix.database”]

logging.getLogger[“coralogix.client”]
9
  'handlers': {

    'stderr': {

        'level': 'INFO',

        'class': 'logging.StreamHandler',

        'formatter': 'your_formatter',

      },

    },
0 thường được dùng để tạo bộ ghi nhật ký. Bằng cách sử dụng hàm
logging.getLogger[“coralogix”]

logging.getLogger[“coralogix.database”]

logging.getLogger[“coralogix.client”]
9, khách hàng có thể dựa vào thư viện để quản lý bộ ghi và truy cập bộ ghi thông qua tên của chúng thay vì lưu trữ và chuyển tham chiếu đến bộ ghi

Đối số

  'handlers': {

    'stderr': {

        'level': 'INFO',

        'class': 'logging.StreamHandler',

        'formatter': 'your_formatter',

      },

    },
2 trong hàm xuất xưởng thường là tên phân cấp được phân tách bằng dấu chấm, e. g. , một. b. c. Quy ước đặt tên này cho phép thư viện duy trì hệ thống phân cấp các bộ ghi. Cụ thể, khi hàm
logging.getLogger[“coralogix”]

logging.getLogger[“coralogix.database”]

logging.getLogger[“coralogix.client”]
9 tạo một trình ghi nhật ký, thư viện đảm bảo rằng một trình ghi tồn tại cho từng cấp của cấu trúc phân cấp được chỉ định bởi tên và mọi trình ghi trong cấu trúc phân cấp được liên kết với trình ghi cha và con của nó

Mức ghi ngưỡng

Mỗi trình ghi nhật ký có một mức ghi nhật ký ngưỡng xác định xem có nên xử lý yêu cầu nhật ký hay không. Trình ghi nhật ký xử lý yêu cầu nhật ký nếu giá trị số của cấp độ ghi nhật ký được yêu cầu lớn hơn hoặc bằng giá trị số của ngưỡng ghi nhật ký của trình ghi nhật ký. Khách hàng có thể truy xuất và thay đổi mức ghi ngưỡng của trình ghi nhật ký thông qua các phương thức

  'handlers': {

    'stderr': {

        'level': 'INFO',

        'class': 'logging.StreamHandler',

        'formatter': 'your_formatter',

      },

    },
4 và
  'handlers': {

    'stderr': {

        'level': 'INFO',

        'class': 'logging.StreamHandler',

        'formatter': 'your_formatter',

      },

    },
5 tương ứng

Khi hàm

logging.getLogger[“coralogix”]

logging.getLogger[“coralogix.database”]

logging.getLogger[“coralogix.client”]
9 được sử dụng để tạo bộ ghi nhật ký, hàm này sẽ đặt mức ghi ngưỡng của bộ ghi thành mức ghi ngưỡng của bộ ghi chính của nó như được xác định bởi
  'handlers': {

    'stderr': {

        'level': 'INFO',

        'class': 'logging.StreamHandler',

        'formatter': 'your_formatter',

      },

    },
2 của nó

Phương thức ghi nhật ký Python

Mọi thiết bị ghi nhật ký đều cung cấp các phương thức ghi nhật ký sau đây để đưa ra các yêu cầu ghi nhật ký

Mỗi phương pháp này là một cách viết tắt để đưa ra các yêu cầu nhật ký với các mức ghi nhật ký được xác định trước tương ứng như mức ghi nhật ký được yêu cầu

Ngoài các phương pháp trên, logger còn cung cấp hai phương pháp sau

  •   'handlers': {
    
        'stderr': {
    
            'level': 'INFO',
    
            'class': 'logging.StreamHandler',
    
            'formatter': 'your_formatter',
    
          },
    
        },
    8 đưa ra các yêu cầu ghi nhật ký với các mức ghi nhật ký được chỉ định rõ ràng. Phương pháp này hữu ích khi sử dụng các mức ghi nhật ký tùy chỉnh
  •   'handlers': {
    
        'stderr': {
    
            'level': 'INFO',
    
            'class': 'logging.StreamHandler',
    
            'formatter': 'your_formatter',
    
          },
    
        },
    9 đưa ra các yêu cầu nhật ký với cấp độ ghi nhật ký
        $ uwsgi --log-syslog=yourapp …
    0 và ghi lại ngoại lệ hiện tại như một phần của các mục nhập nhật ký. Do đó, khách hàng chỉ nên gọi phương thức này từ một trình xử lý ngoại lệ

Các đối số

    $ uwsgi --log-syslog=yourapp …
1 và
    $ uwsgi --log-syslog=yourapp …
2 trong các phương pháp trên được kết hợp để tạo thông báo nhật ký được ghi lại bởi các mục nhập nhật ký. Tất cả các phương pháp trên đều hỗ trợ đối số từ khóa
    $ uwsgi --log-syslog=yourapp …
3 để thêm thông tin ngoại lệ vào các mục nhật ký và
    $ uwsgi --log-syslog=yourapp …
4 và
    $ uwsgi --log-syslog=yourapp …
5 để thêm thông tin ngăn xếp lệnh gọi vào các mục nhật ký. Ngoài ra, chúng hỗ trợ đối số từ khóa
    $ uwsgi --log-syslog=yourapp …
6, là một từ điển, để chuyển các giá trị liên quan đến , , và

Khi được thực thi, các phương thức trên sẽ thực hiện/kích hoạt tất cả các tác vụ được hiển thị trong Hình 1 và hai tác vụ sau

  1. Sau khi quyết định xử lý một yêu cầu nhật ký dựa trên cấp độ ghi nhật ký và ngưỡng ghi nhật ký, trình ghi nhật ký sẽ tạo một đối tượng
        $ uwsgi --log-syslog=yourapp …
    7 để thể hiện yêu cầu nhật ký trong quá trình xử lý tiếp theo của yêu cầu. Các đối tượng
        $ uwsgi --log-syslog=yourapp …
    8 nắm bắt các đối số
        $ uwsgi --log-syslog=yourapp …
    1 và
        $ uwsgi --log-syslog=yourapp …
    2 của phương thức ghi nhật ký cũng như ngoại lệ và thông tin ngăn xếp cuộc gọi cùng với thông tin mã nguồn. Chúng cũng nắm bắt các khóa và giá trị trong đối số phụ của phương thức ghi nhật ký dưới dạng các trường
  2. Sau khi mọi trình xử lý của trình ghi nhật ký đã xử lý yêu cầu nhật ký, trình xử lý của trình ghi nhật ký tổ tiên của nó sẽ xử lý yêu cầu [theo thứ tự chúng gặp phải khi đi lên hệ thống phân cấp trình ghi nhật ký]. Trường
    access_log /var/log/nginx/access.log;
    1 kiểm soát khía cạnh này, là trường
    access_log /var/log/nginx/access.log;
    2 theo mặc định

Ngoài các cấp độ ghi nhật ký,  cung cấp một phương tiện tốt hơn để lọc các yêu cầu nhật ký dựa trên thông tin trong bản ghi nhật ký, e. g. , bỏ qua các yêu cầu nhật ký được đưa ra trong một lớp cụ thể. Khách hàng có thể thêm và xóa bộ lọc vào/khỏi trình ghi nhật ký bằng cách sử dụng phương pháp

access_log /var/log/nginx/access.log;
3 và
access_log /var/log/nginx/access.log;
4 tương ứng

Bộ lọc nhật ký Python

Bất kỳ hàm hoặc khả năng gọi nào chấp nhận đối số bản ghi nhật ký và trả về 0 để từ chối bản ghi và giá trị khác 0 để thừa nhận bản ghi có thể đóng vai trò là

access_log /var/log/nginx/access.log;
5. Bất kỳ đối tượng nào cung cấp phương thức có chữ ký
access_log /var/log/nginx/access.log;
6 int cũng có thể dùng làm bộ lọc

Một lớp con của

access_log /var/log/nginx/access.log;
7 tùy chọn ghi đè phương thức
access_log /var/log/nginx/access.log;
8 cũng có thể dùng làm bộ lọc. Nếu không ghi đè phương thức bộ lọc, bộ lọc như vậy sẽ chấp nhận các bản ghi do bộ ghi nhật ký phát ra có cùng tên với bộ lọc và là phần tử con của bộ lọc [dựa trên tên của bộ ghi nhật ký và bộ lọc]. Nếu tên của bộ lọc trống, thì bộ lọc thừa nhận tất cả các bản ghi. Nếu phương thức bị ghi đè, thì nó sẽ trả về giá trị 0 để từ chối bản ghi và giá trị khác 0 để thừa nhận bản ghi

Trình xử lý ghi nhật ký Python

Các đối tượng

access_log /var/log/nginx/access.log;
9 thực hiện xử lý cuối cùng các bản ghi nhật ký, tôi. e. , ghi nhật ký yêu cầu. Quá trình xử lý cuối cùng này thường chuyển thành lưu trữ bản ghi nhật ký, e. g. , viết nó vào  hoặc. Nó cũng có thể dịch nó để truyền dữ liệu bản ghi nhật ký cho các thực thể cụ thể [e. g. , gửi một ] hoặc chuyển bản ghi nhật ký cho các thực thể khác để xử lý thêm [e. g. , hãy cung cấp bản ghi nhật ký cho một  hoặc một ]

Giống như trình ghi nhật ký, trình xử lý có ngưỡng ghi nhật ký, có thể được đặt thông qua phương thức

# note that the log_format directly below is a single line
log_format mycombined '$remote_addr - $remote_user [$time_local] 
"$request" $status $body_bytes_sent "$http_referer" 
"$http_user_agent"'server_port'; 
access_log /var/log/nginx/access.log mycombinedplus;
0. Họ cũng hỗ trợ qua các phương thức
# note that the log_format directly below is a single line
log_format mycombined '$remote_addr - $remote_user [$time_local] 
"$request" $status $body_bytes_sent "$http_referer" 
"$http_user_agent"'server_port'; 
access_log /var/log/nginx/access.log mycombinedplus;
1 và
# note that the log_format directly below is a single line
log_format mycombined '$remote_addr - $remote_user [$time_local] 
"$request" $status $body_bytes_sent "$http_referer" 
"$http_user_agent"'server_port'; 
access_log /var/log/nginx/access.log mycombinedplus;
2

Trình xử lý sử dụng mức ghi nhật ký ngưỡng và bộ lọc của họ để lọc các bản ghi nhật ký để xử lý. Bộ lọc bổ sung này cho phép kiểm soát theo ngữ cảnh cụ thể đối với việc ghi nhật ký, e. g. , trình xử lý thông báo chỉ nên xử lý các yêu cầu nhật ký quan trọng hoặc từ một mô-đun dễ hỏng

Trong khi xử lý các bản ghi nhật ký, trình xử lý định dạng các bản ghi nhật ký thành các mục nhật ký bằng cách sử dụng. Khách hàng có thể đặt trình định dạng cho trình xử lý thông qua phương thức. Nếu trình xử lý không có bộ định dạng thì nó sẽ sử dụng bộ định dạng mặc định do thư viện cung cấp

việc ghi nhật ký. mô-đun trình xử lý cung cấp bao gồm nhiều trường hợp sử dụng phổ biến [bao gồm cả những trường hợp được đề cập ở trên]. Vì vậy, việc khởi tạo và định cấu hình các trình xử lý này là đủ trong nhiều tình huống

Trong các tình huống cần có trình xử lý tùy chỉnh, nhà phát triển có thể mở rộng lớp

# note that the log_format directly below is a single line
log_format mycombined '$remote_addr - $remote_user [$time_local] 
"$request" $status $body_bytes_sent "$http_referer" 
"$http_user_agent"'server_port'; 
access_log /var/log/nginx/access.log mycombinedplus;
3 hoặc một trong các lớp Trình xử lý được xác định trước bằng cách triển khai phương thức
# note that the log_format directly below is a single line
log_format mycombined '$remote_addr - $remote_user [$time_local] 
"$request" $status $body_bytes_sent "$http_referer" 
"$http_user_agent"'server_port'; 
access_log /var/log/nginx/access.log mycombinedplus;
4 để ghi lại bản ghi nhật ký được cung cấp

Trình định dạng nhật ký Python

Trình xử lý sử dụng đối tượng

# note that the log_format directly below is a single line
log_format mycombined '$remote_addr - $remote_user [$time_local] 
"$request" $status $body_bytes_sent "$http_referer" 
"$http_user_agent"'server_port'; 
access_log /var/log/nginx/access.log mycombinedplus;
5 để định dạng bản ghi nhật ký thành mục nhập nhật ký dựa trên chuỗi

Ghi chú. Trình định dạng không kiểm soát việc tạo thông điệp tường trình

Trình định dạng hoạt động bằng cách kết hợp các trường/dữ liệu trong bản ghi nhật ký với chuỗi định dạng do người dùng chỉ định

Không giống như các trình xử lý, thư viện ghi nhật ký chỉ cung cấp một trình định dạng cơ bản ghi lại cấp độ ghi được yêu cầu, tên của trình ghi nhật ký và thông báo tường trình. Vì vậy, ngoài các trường hợp sử dụng đơn giản, khách hàng cần tạo các trình định dạng mới bằng cách tạo các đối tượng

# note that the log_format directly below is a single line
log_format mycombined '$remote_addr - $remote_user [$time_local] 
"$request" $status $body_bytes_sent "$http_referer" 
"$http_user_agent"'server_port'; 
access_log /var/log/nginx/access.log mycombinedplus;
6 với các chuỗi định dạng cần thiết

Trình định dạng hỗ trợ ba kiểu chuỗi định dạng

# note that the log_format directly below is a single line
log_format mycombined '$remote_addr - $remote_user [$time_local] 
"$request" $status $body_bytes_sent "$http_referer" 
"$http_user_agent"'server_port'; 
access_log /var/log/nginx/access.log mycombinedplus;
7, e. g. , '%[tên cấp độ]s. %[name]s. %[tin nhắn]s’

# note that the log_format directly below is a single line
log_format mycombined '$remote_addr - $remote_user [$time_local] 
"$request" $status $body_bytes_sent "$http_referer" 
"$http_user_agent"'server_port'; 
access_log /var/log/nginx/access.log mycombinedplus;
8, e. g. , '{tên cấp độ}. {Tên}. {thông điệp}'

# note that the log_format directly below is a single line
log_format mycombined '$remote_addr - $remote_user [$time_local] 
"$request" $status $body_bytes_sent "$http_referer" 
"$http_user_agent"'server_port'; 
access_log /var/log/nginx/access.log mycombinedplus;
9, e. g. , ‘$levelname. tên $. $tin nhắn'

Chuỗi định dạng của trình định dạng có thể tham chiếu đến bất kỳ trường nào của đối tượng

    $ uwsgi --log-syslog=yourapp …
8, bao gồm các trường dựa trên các khóa của đối số
    $ uwsgi --log-syslog=yourapp …
6 của phương thức
    with open[logfile, "rb"] as f:

        for line in csv.reader[f, delimiter=' ']:

            self._update[**self._parse[line]]
2

Trước khi định dạng một bản ghi nhật ký, trình định dạng sử dụng phương pháp

    with open[logfile, "rb"] as f:

        for line in csv.reader[f, delimiter=' ']:

            self._update[**self._parse[line]]
3 để xây dựng thông điệp tường trình bằng cách kết hợp các đối số
    $ uwsgi --log-syslog=yourapp …
1 và
    $ uwsgi --log-syslog=yourapp …
2 của phương pháp ghi nhật ký [được lưu trữ trong bản ghi nhật ký] bằng cách sử dụng
    with open[logfile, "rb"] as f:

        for line in csv.reader[f, delimiter=' ']:

            self._update[**self._parse[line]]
6. Sau đó, trình định dạng kết hợp thông báo nhật ký kết quả với dữ liệu trong bản ghi nhật ký bằng cách sử dụng chuỗi định dạng đã chỉ định để tạo mục nhập nhật ký

Mô-đun ghi nhật ký Python

Để duy trì hệ thống phân cấp trình ghi nhật ký, khi ứng dụng khách sử dụng thư viện ghi nhật ký, thư viện sẽ tạo một trình ghi nhật ký gốc đóng vai trò là gốc của hệ thống phân cấp trình ghi nhật ký. Mức ghi ngưỡng mặc định của bộ ghi gốc là

LogWithLevelName = logging.getLogger['myLoggerSample']
level = logging.getLevelName['INFO']
LogWithLevelName.setLevel[level]
2

Mô-đun này cung cấp tất cả các phương thức ghi nhật ký do lớp

    with open[logfile, "rb"] as f:

        for line in csv.reader[f, delimiter=' ']:

            self._update[**self._parse[line]]
8 cung cấp dưới dạng các hàm
    with open[logfile, "rb"] as f:

        for line in csv.reader[f, delimiter=' ']:

            self._update[**self._parse[line]]
9 có tên và chữ ký giống hệt nhau, e. g. ,
2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
00. Máy khách có thể sử dụng các chức năng này để đưa ra các yêu cầu nhật ký mà không cần tạo trình ghi nhật ký và trình ghi nhật ký gốc sẽ phục vụ các yêu cầu này. Nếu bộ ghi nhật ký gốc không có trình xử lý khi phục vụ các yêu cầu nhật ký được đưa ra thông qua các phương pháp này, thì thư viện ghi nhật ký sẽ thêm một phiên bản
2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
01 dựa trên luồng _______102 làm trình xử lý cho bộ ghi nhật ký gốc

Khi trình ghi nhật ký không có trình xử lý nhận được yêu cầu nhật ký, thư viện nhật ký sẽ hướng các yêu cầu nhật ký đó đến trình xử lý cuối cùng, đó là một thực thể

2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
01 dựa trên
2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
04. Có thể truy cập trình xử lý này thông qua thuộc tính _______105

Ví dụ về nhật ký Python

Dưới đây là một số đoạn mã minh họa cách sử dụng thư viện ghi nhật ký Python

Đoạn 1. Tạo trình ghi nhật ký với trình xử lý và trình định dạng

2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
0

Đoạn mã này thực hiện như sau

  1. Tạo một trình ghi nhật ký có tên là 'ứng dụng'
  2. Đặt mức ghi ngưỡng của thiết bị ghi thành INFO
  3. Tạo trình xử lý dựa trên luồng ghi các mục nhật ký vào luồng lỗi tiêu chuẩn
  4. Đặt ngưỡng ghi nhật ký của trình xử lý thành INFO
  5. Tạo một định dạng để chụp
    • thời gian của yêu cầu nhật ký dưới dạng số giây kể từ kỷ nguyên,
    • mức ghi nhật ký của yêu cầu,
    • tên của người khai thác gỗ,
    • tên của mô-đun đưa ra yêu cầu nhật ký và
    • thông điệp nhật ký
  6. Đặt trình định dạng đã tạo làm trình định dạng của trình xử lý
  7. Thêm trình xử lý đã tạo vào trình ghi nhật ký này

Bằng cách thay đổi trình xử lý được tạo ở bước 3, chúng tôi có thể chuyển hướng các mục nhật ký đến các vị trí hoặc bộ xử lý khác nhau

Đoạn 2. Phát hành yêu cầu nhật ký

2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
1

Đoạn mã này ghi lại các thông báo thông tin cho biết ứng dụng đã bắt đầu

Khi khởi động ứng dụng trong thư mục /home/kali với trình ghi nhật ký được tạo bằng đoạn mã 1, đoạn mã này sẽ tạo mục nhập nhật ký

2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
06 trong luồng lỗi tiêu chuẩn

Đoạn 3. Phát hành yêu cầu nhật ký

2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
2

Đoạn mã này ghi lại thông báo thông tin mỗi khi dữ liệu được ghi thành công qua

2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
07. Nếu ghi không thành công, thì đoạn mã sẽ ghi lại thông báo lỗi bao gồm dấu vết ngăn xếp trong đó ngoại lệ xảy ra

Với trình ghi nhật ký được tạo bằng đoạn mã 1, nếu việc thực thi

2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
08 thành công thì đoạn mã này sẽ tạo một mục nhập nhật ký tương tự như
2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
09. Nếu việc thực thi
2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
08 không thành công thì đoạn mã này sẽ tạo mục nhập nhật ký sau

2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
3

Thay vì sử dụng các đối số vị trí trong chuỗi định dạng trong phương thức ghi nhật ký, chúng ta có thể đạt được kết quả tương tự bằng cách sử dụng các đối số thông qua tên của chúng như sau

2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
4

Đoạn 4. Lọc yêu cầu nhật ký

2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
5

Đoạn mã này sửa đổi Đoạn mã 1 như sau

  1. Các dòng được đánh dấu số 1 thêm bộ lọc vào trình xử lý. Bộ lọc này chỉ chấp nhận các bản ghi nhật ký nếu mức ghi nhật ký của chúng lớn hơn hoặc bằng
    LogWithLevelName = logging.getLogger['myLoggerSample']
    level = logging.getLevelName['INFO']
    LogWithLevelName.setLevel[level]
    1 hoặc chúng đến từ một thành phần có phiên bản cao hơn 4
  2. Dòng được đánh dấu #2 bao bọc trình ghi nhật ký trong đối tượng
    2021-07-02 13:00:08,743 DEBUG Debug message
    
    2021-07-02 13:00:08,743 INFO Informative message
    
    2021-07-02 13:00:08,743 ERROR Error message
    12 để đưa thông tin phiên bản vào bản ghi nhật ký

Lớp

2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
13 cung cấp một cơ chế để đưa thông tin theo ngữ cảnh vào các bản ghi nhật ký. Chúng tôi thảo luận về các cơ chế khác để đưa thông tin theo ngữ cảnh vào phần

2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
6

Đoạn mã này sửa đổi Đoạn mã 3 bằng cách bọc trình ghi nhật ký trong đối tượng

2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
14 để thêm thông tin phiên bản

Tất cả những thay đổi trên ảnh hưởng đến hành vi ghi nhật ký của ứng dụng được mô tả trong Đoạn 2 và Đoạn 3 như sau

  1. Yêu cầu ghi lại thông báo thông tin về việc bắt đầu ứng dụng được xử lý khi thông tin phiên bản do mô-đun cung cấp đáp ứng bộ lọc
  2. Yêu cầu ghi lại thông báo thông tin về việc ghi thành công bị bỏ qua vì thông tin phiên bản do mô-đun cung cấp không đáp ứng bộ lọc
  3. Yêu cầu ghi thông báo lỗi về việc không thể ghi dữ liệu được xử lý khi cấp độ ghi của thông báo đáp ứng bộ lọc

Bạn cho rằng điều gì sẽ xảy ra nếu bộ lọc được thêm vào bộ ghi thay vì bộ xử lý?

Cấu hình ghi nhật ký Python

Các lớp ghi nhật ký được giới thiệu trong phần trước cung cấp các phương thức để định cấu hình các phiên bản của chúng và do đó, tùy chỉnh việc sử dụng thư viện ghi nhật ký. trình bày cách sử dụng các phương pháp cấu hình. Các phương pháp này được sử dụng tốt nhất trong các chương trình tệp đơn giản

Khi tham gia các chương trình [e. g. , ứng dụng, thư viện] sử dụng thư viện ghi nhật ký, tùy chọn tốt hơn là đưa cấu hình của thư viện ghi nhật ký ra bên ngoài. Việc mở rộng như vậy cho phép người dùng tùy chỉnh các khía cạnh nhất định của việc đăng nhập vào một chương trình [e. g. , chỉ định vị trí của tệp nhật ký, sử dụng trình ghi nhật ký/trình xử lý/bộ định dạng/bộ lọc tùy chỉnh] và do đó, dễ dàng triển khai và sử dụng chương trình. Chúng tôi đề cập đến cách tiếp cận cấu hình này là cách tiếp cận dựa trên dữ liệu

Cấu hình thư viện

Khách hàng có thể định cấu hình thư viện ghi nhật ký bằng cách gọi hàm

2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
15. Đối số
2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
16 là một từ điển và có thể sử dụng các khóa tùy chọn sau để chỉ định cấu hình

lọc ánh xạ phím tới từ điển gồm các chuỗi và từ điển. Các chuỗi đóng vai trò là id bộ lọc được dùng để chỉ các bộ lọc trong cấu hình [e. g. , thêm bộ lọc vào bộ ghi] trong khi các từ điển được ánh xạ đóng vai trò cấu hình bộ lọc. Giá trị chuỗi của khóa tên trong cấu hình bộ lọc được sử dụng để xây dựng

2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
17

2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
7

Đoạn cấu hình này dẫn đến việc tạo bộ lọc thừa nhận tất cả các bản ghi được tạo bởi trình ghi nhật ký có tên 'ứng dụng. io' hoặc hậu duệ của nó

trình định dạng ánh xạ chính tới từ điển gồm các chuỗi và từ điển. Các chuỗi đóng vai trò là id trình định dạng được dùng để chỉ các trình định dạng trong cấu hình [e. g. , thêm bộ định dạng vào trình xử lý] trong khi các từ điển được ánh xạ đóng vai trò là cấu hình bộ định dạng. Giá trị chuỗi của khóa datefmt và khóa định dạng trong cấu hình trình định dạng được sử dụng tương ứng làm chuỗi định dạng mục nhập ngày và nhật ký để xây dựng các phiên bản

# note that the log_format directly below is a single line
log_format mycombined '$remote_addr - $remote_user [$time_local] 
"$request" $status $body_bytes_sent "$http_referer" 
"$http_user_agent"'server_port'; 
access_log /var/log/nginx/access.log mycombinedplus;
6. Giá trị boolean của khóa xác thực [tùy chọn] kiểm soát việc xác thực các chuỗi định dạng trong quá trình xây dựng trình định dạng

2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
8

Đoạn cấu hình này dẫn đến việc tạo hai trình định dạng. Trình định dạng đơn giản với chuỗi định dạng ngày và mục nhập nhật ký được chỉ định và trình định dạng chi tiết với chuỗi định dạng mục nhập nhật ký được chỉ định và chuỗi định dạng ngày mặc định

trình xử lý ánh xạ chính tới một từ điển gồm các chuỗi và từ điển. Các chuỗi đóng vai trò là id trình xử lý được dùng để chỉ các trình xử lý trong cấu hình [e. g. , thêm trình xử lý vào trình ghi nhật ký] trong khi các từ điển được ánh xạ đóng vai trò là cấu hình trình xử lý. Giá trị chuỗi của khóa lớp trong cấu hình trình xử lý đặt tên cho lớp cần khởi tạo để tạo trình xử lý. Giá trị chuỗi của khóa cấp độ [tùy chọn] chỉ định cấp độ ghi nhật ký của trình xử lý đã khởi tạo. Giá trị chuỗi của khóa trình định dạng [tùy chọn] chỉ định id của trình định dạng của trình xử lý. Tương tự như vậy, danh sách các giá trị của khóa bộ lọc [tùy chọn] chỉ định id của các bộ lọc của trình xử lý. Các khóa còn lại được chuyển dưới dạng đối số từ khóa cho hàm tạo của trình xử lý

2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
9

Đoạn cấu hình này dẫn đến việc tạo hai trình xử lý

  • Trình xử lý
    2021-07-02 13:00:08,743 DEBUG Debug message
    
    2021-07-02 13:00:08,743 INFO Informative message
    
    2021-07-02 13:00:08,743 ERROR Error message
    19 định dạng yêu cầu nhật ký bằng INFO và nhật ký mức ghi nhật ký cao hơn thông qua trình định dạng
    2021-07-02 13:00:08,743 DEBUG Debug message
    
    2021-07-02 13:00:08,743 INFO Informative message
    
    2021-07-02 13:00:08,743 ERROR Error message
    20 và đưa mục nhập nhật ký kết quả vào luồng lỗi tiêu chuẩn. Khóa
    2021-07-02 13:00:08,743 DEBUG Debug message
    
    2021-07-02 13:00:08,743 INFO Informative message
    
    2021-07-02 13:00:08,743 ERROR Error message
    21 được chuyển dưới dạng đối số từ khóa cho hàm tạo
    2021-07-02 13:00:08,743 DEBUG Debug message
    
    2021-07-02 13:00:08,743 INFO Informative message
    
    2021-07-02 13:00:08,743 ERROR Error message
    01.
    Giá trị của khóa
    2021-07-02 13:00:08,743 DEBUG Debug message
    
    2021-07-02 13:00:08,743 INFO Informative message
    
    2021-07-02 13:00:08,743 ERROR Error message
    21 minh họa cách truy cập các đối tượng bên ngoài cấu hình. Chuỗi tiền tố
    2021-07-02 13:00:08,743 DEBUG Debug message
    
    2021-07-02 13:00:08,743 INFO Informative message
    
    2021-07-02 13:00:08,743 ERROR Error message
    24 đề cập đến đối tượng có thể truy cập được khi chuỗi không có phần mở rộng. // tiền tố [i. e. , hệ thống. stderr] được xử lý thông qua cơ chế nhập thông thường. Tham khảo để biết thêm chi tiết. Tham khảo để biết chi tiết về một cơ chế tương tự dựa trên tiền tố
    2021-07-02 13:00:08,743 DEBUG Debug message
    
    2021-07-02 13:00:08,743 INFO Informative message
    
    2021-07-02 13:00:08,743 ERROR Error message
    25 để chỉ các đối tượng bên trong một cấu hình.
  • Trình xử lý cảnh báo định dạng các yêu cầu nhật ký LỖI và NGHIÊM TÚC thông qua trình định dạng
    2021-07-02 13:00:08,743 DEBUG Debug message
    
    2021-07-02 13:00:08,743 INFO Informative message
    
    2021-07-02 13:00:08,743 ERROR Error message
    26 và gửi mục nhập nhật ký kết quả qua email đến các địa chỉ email đã cho. Các khóa
    2021-07-02 13:00:08,743 DEBUG Debug message
    
    2021-07-02 13:00:08,743 INFO Informative message
    
    2021-07-02 13:00:08,743 ERROR Error message
    27,
    2021-07-02 13:00:08,743 DEBUG Debug message
    
    2021-07-02 13:00:08,743 INFO Informative message
    
    2021-07-02 13:00:08,743 ERROR Error message
    28,
    2021-07-02 13:00:08,743 DEBUG Debug message
    
    2021-07-02 13:00:08,743 INFO Informative message
    
    2021-07-02 13:00:08,743 ERROR Error message
    29 và chủ đề được chuyển dưới dạng đối số từ khóa cho hàm tạo của
    2021-07-02 13:00:08,743 DEBUG Debug message
    
    2021-07-02 13:00:08,743 INFO Informative message
    
    2021-07-02 13:00:08,743 ERROR Error message
    30

logger ánh xạ tới một từ điển gồm các chuỗi đóng vai trò là tên của logger và từ điển đóng vai trò là cấu hình logger. Giá trị chuỗi của khóa

2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
31 [tùy chọn] chỉ định cấp độ ghi nhật ký của thiết bị ghi nhật ký. Giá trị boolean của khóa
2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
32 [tùy chọn] chỉ định cài đặt lan truyền của bộ ghi. Danh sách các giá trị của khóa
2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
33 [tùy chọn] chỉ định id của các bộ lọc của trình ghi nhật ký. Tương tự như vậy, danh sách các giá trị của khóa
2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
34 [tùy chọn] chỉ định id của trình xử lý của trình ghi nhật ký

import logging
logging.basicConfig[level=logging.DEBUG, format='%[asctime]s - %[levelname]s - %[message]s']
logging.debug['This is a log message.']
0

Đoạn cấu hình này dẫn đến việc tạo hai bộ ghi. Trình ghi nhật ký đầu tiên có tên là ứng dụng, ngưỡng ghi nhật ký của nó được đặt thành CẢNH BÁO và được định cấu hình để chuyển tiếp yêu cầu nhật ký tới trình xử lý

2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
35 và
2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
36 . Trình ghi nhật ký thứ hai được đặt tên là ứng dụng. io và ngưỡng ghi nhật ký của nó được đặt thành INFO. Do yêu cầu nhật ký được truyền tới trình xử lý được liên kết với mọi trình ghi nhật ký tăng dần, nên mọi yêu cầu nhật ký có INFO hoặc cấp độ ghi nhật ký cao hơn được thực hiện thông qua ứng dụng. io logger sẽ được chuyển đến và xử lý bởi cả trình xử lý
2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
35 và
2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
36

khóa gốc ánh xạ tới từ điển cấu hình cho trình ghi gốc. Định dạng của từ điển được ánh xạ giống như từ điển được ánh xạ cho bộ ghi

ánh xạ khóa tăng dần thành Đúng hoặc Sai [mặc định]. Nếu Đúng, thì chỉ các mức ghi nhật ký và tùy chọn truyền của trình ghi nhật ký, trình xử lý và trình ghi nhật ký gốc được xử lý và tất cả các bit khác của cấu hình sẽ bị bỏ qua. Khóa này rất hữu ích để thay đổi cấu hình ghi nhật ký hiện có. Tham khảo để biết thêm chi tiết

khóa disable_current_loggers ánh xạ tới

access_log /var/log/nginx/access.log;
2 [mặc định] hoặc
2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
40. Nếu
2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
40, thì tất cả các trình ghi nhật ký không phải root hiện có sẽ bị vô hiệu hóa do xử lý cấu hình này

Ngoài ra, đối số

2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
16 phải ánh xạ khóa
2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
43 thành 1

Đây là cấu hình hoàn chỉnh bao gồm các đoạn trên

import logging
logging.basicConfig[level=logging.DEBUG, format='%[asctime]s - %[levelname]s - %[message]s']
logging.debug['This is a log message.']
1

Tùy chỉnh thông qua Chức năng của Nhà máy

Lược đồ cấu hình cho các bộ lọc hỗ trợ một mẫu để chỉ định hàm

logging.getLogger[“coralogix”]

logging.getLogger[“coralogix.database”]

logging.getLogger[“coralogix.client”]
9 để tạo bộ lọc. Trong mẫu này, cấu hình bộ lọc ánh xạ khóa [] với tên đủ điều kiện của bộ lọc tạo chức năng xuất xưởng cùng với một bộ khóa và giá trị được chuyển dưới dạng đối số từ khóa cho chức năng xuất xưởng. Ngoài ra, các thuộc tính và giá trị có thể được thêm vào bộ lọc tùy chỉnh bằng cách ánh xạ khóa
2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
45 vào từ điển tên và giá trị thuộc tính

Ví dụ: cấu hình bên dưới sẽ khiến lệnh gọi

2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
46 tạo bộ lọc tùy chỉnh và thêm thuộc tính cục bộ có giá trị
access_log /var/log/nginx/access.log;
2 vào bộ lọc này

import logging
logging.basicConfig[level=logging.DEBUG, format='%[asctime]s - %[levelname]s - %[message]s']
logging.debug['This is a log message.']
2

Lược đồ cấu hình cho trình định dạng, trình xử lý và trình ghi nhật ký cũng hỗ trợ mẫu trên. Trong trường hợp trình xử lý/trình ghi nhật ký, nếu mẫu này và khóa

2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
48 xuất hiện trong từ điển cấu hình, thì mẫu này được sử dụng để tạo trình xử lý/trình ghi nhật ký. Tham khảo để biết thêm chi tiết

Cấu hình bằng Configparse-Format Files

Thư viện ghi nhật ký cũng hỗ trợ tải cấu hình từ tệp có định dạng

2021-07-02 13:00:08,743 DEBUG Debug message

2021-07-02 13:00:08,743 INFO Informative message

2021-07-02 13:00:08,743 ERROR Error message
49 thông qua hàm

Chủ Đề