Hướng dẫn logging only info python - chỉ ghi nhật ký thông tin python

Tác giả

Vinay Sajip

Hướng dẫn ghi nhật ký cơ bản

Ghi nhật ký là một phương tiện để theo dõi các sự kiện xảy ra khi một số phần mềm chạy. Nhà phát triển phần mềm bổ sung các cuộc gọi đăng nhập vào mã của họ để chỉ ra rằng một số sự kiện đã xảy ra. Một sự kiện được mô tả bởi một thông điệp mô tả có thể tùy chọn chứa dữ liệu biến (nghĩa là dữ liệu có khả năng khác nhau cho mỗi lần xuất hiện của sự kiện). Các sự kiện cũng có tầm quan trọng mà nhà phát triển gán cho sự kiện này; Tầm quan trọng cũng có thể được gọi là mức độ hoặc mức độ nghiêm trọng.

Khi nào nên sử dụng Logging¶

Ghi nhật ký cung cấp một tập hợp các chức năng tiện lợi để sử dụng ghi nhật ký đơn giản. Đây là

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
8,
DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
9,
getattr(logging, loglevel.upper())
0,
getattr(logging, loglevel.upper())
1 và
getattr(logging, loglevel.upper())
2. Để xác định khi nào nên sử dụng ghi nhật ký, hãy xem bảng bên dưới, trong đó, cho mỗi tập hợp các nhiệm vụ phổ biến, công cụ tốt nhất để sử dụng cho nó.

Nhiệm vụ bạn muốn thực hiện

Công cụ tốt nhất cho nhiệm vụ

Hiển thị đầu ra bảng điều khiển để sử dụng thông thường của tập lệnh hoặc chương trình dòng lệnh

getattr(logging, loglevel.upper())
3

Báo cáo các sự kiện xảy ra trong quá trình hoạt động bình thường của một chương trình (ví dụ: để theo dõi trạng thái hoặc điều tra lỗi)

getattr(logging, loglevel.upper())
4 (hoặc
getattr(logging, loglevel.upper())
5 cho đầu ra rất chi tiết cho mục đích chẩn đoán)

Đưa ra cảnh báo về một sự kiện thời gian chạy cụ thể

getattr(logging, loglevel.upper())
6 trong mã thư viện nếu sự cố là có thể tránh được và ứng dụng máy khách phải được sửa đổi để loại bỏ cảnh báo

getattr(logging, loglevel.upper())
7 Nếu không có gì ứng dụng khách hàng có thể làm về tình huống, nhưng sự kiện vẫn cần lưu ý

Báo cáo một lỗi liên quan đến một sự kiện thời gian chạy cụ thể

Nâng cao một ngoại lệ

Báo cáo đàn áp lỗi mà không gây ra ngoại lệ (ví dụ: trình xử lý lỗi trong quy trình máy chủ dài)

getattr(logging, loglevel.upper())
8,
getattr(logging, loglevel.upper())
9 hoặc
# assuming loglevel is bound to the string value obtained from the
# command line argument. Convert to upper case to allow the user to
# specify --log=DEBUG or --log=debug
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
    raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level, ...)
0 khi phù hợp với lỗi cụ thể và miền ứng dụng

Các chức năng ghi nhật ký được đặt tên theo mức độ hoặc mức độ nghiêm trọng của các sự kiện mà chúng được sử dụng để theo dõi. Các mức tiêu chuẩn và khả năng ứng dụng của chúng được mô tả dưới đây (theo thứ tự ngày càng tăng của mức độ nghiêm trọng):

Mức độ

Khi nó được sử dụng

# assuming loglevel is bound to the string value obtained from the
# command line argument. Convert to upper case to allow the user to
# specify --log=DEBUG or --log=debug
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
    raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level, ...)
1

Thông tin chi tiết, thường chỉ được quan tâm khi chẩn đoán các vấn đề.

# assuming loglevel is bound to the string value obtained from the
# command line argument. Convert to upper case to allow the user to
# specify --log=DEBUG or --log=debug
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
    raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level, ...)
2

Xác nhận rằng mọi thứ đang hoạt động như mong đợi.

# assuming loglevel is bound to the string value obtained from the
# command line argument. Convert to upper case to allow the user to
# specify --log=DEBUG or --log=debug
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
    raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level, ...)
3

Một dấu hiệu cho thấy một điều gì đó bất ngờ đã xảy ra, hoặc chỉ ra một số vấn đề trong tương lai gần (ví dụ: không gian đĩa thấp). Phần mềm vẫn đang hoạt động như mong đợi.

# assuming loglevel is bound to the string value obtained from the
# command line argument. Convert to upper case to allow the user to
# specify --log=DEBUG or --log=debug
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
    raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level, ...)
4

Do một vấn đề nghiêm trọng hơn, phần mềm đã không thể thực hiện một số chức năng.

# assuming loglevel is bound to the string value obtained from the
# command line argument. Convert to upper case to allow the user to
# specify --log=DEBUG or --log=debug
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
    raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level, ...)
5

Một lỗi nghiêm trọng, chỉ ra rằng bản thân chương trình có thể không thể tiếp tục chạy.

Mức mặc định là

# assuming loglevel is bound to the string value obtained from the
# command line argument. Convert to upper case to allow the user to
# specify --log=DEBUG or --log=debug
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
    raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level, ...)
3, có nghĩa là chỉ các sự kiện ở cấp độ này trở lên sẽ được theo dõi, trừ khi gói ghi nhật ký được cấu hình để làm khác.

Các sự kiện được theo dõi có thể được xử lý theo những cách khác nhau. Cách đơn giản nhất để xử lý các sự kiện theo dõi là in chúng vào bảng điều khiển. Một cách phổ biến khác là viết chúng vào một tệp đĩa.

Một ví dụ đơn giản

Một ví dụ rất đơn giản là:

import logging
logging.warning('Watch out!')  # will print a message to the console
logging.info('I told you so')  # will not print anything

Nếu bạn nhập các dòng này vào một tập lệnh và chạy nó, bạn sẽ thấy:

in ra trên bảng điều khiển. Thông báo

# assuming loglevel is bound to the string value obtained from the
# command line argument. Convert to upper case to allow the user to
# specify --log=DEBUG or --log=debug
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
    raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level, ...)
2 không xuất hiện vì mức mặc định là
# assuming loglevel is bound to the string value obtained from the
# command line argument. Convert to upper case to allow the user to
# specify --log=DEBUG or --log=debug
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
    raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level, ...)
3. Thông báo được in bao gồm dấu hiệu của cấp độ và mô tả về sự kiện được cung cấp trong cuộc gọi đăng nhập, tức là ‘xem ra! Bây giờ đừng lo lắng về phần root gốc: nó sẽ được giải thích sau. Đầu ra thực tế có thể được định dạng khá linh hoạt nếu bạn cần điều đó; Tùy chọn định dạng cũng sẽ được giải thích sau.

Đăng nhập vào một tập tin

Một tình huống rất phổ biến là ghi lại các sự kiện ghi nhật ký trong một tệp, vì vậy hãy để Lôi nhìn vào đó tiếp theo. Hãy chắc chắn thử những điều sau đây trong một phiên dịch viên Python mới bắt đầu và don lồng chỉ tiếp tục từ phiên được mô tả ở trên:

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')

Thay đổi trong phiên bản 3.9: Đối số mã hóa đã được thêm vào. Trong các phiên bản Python trước đó hoặc nếu không được chỉ định, mã hóa được sử dụng là giá trị mặc định được sử dụng bởi

# assuming loglevel is bound to the string value obtained from the
# command line argument. Convert to upper case to allow the user to
# specify --log=DEBUG or --log=debug
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
    raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level, ...)
9. Mặc dù không được hiển thị trong ví dụ trên, một đối số lỗi hiện cũng có thể được thông qua, xác định cách xử lý lỗi mã hóa. Để biết các giá trị có sẵn và mặc định, hãy xem tài liệu cho
# assuming loglevel is bound to the string value obtained from the
# command line argument. Convert to upper case to allow the user to
# specify --log=DEBUG or --log=debug
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
    raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level, ...)
9.The encoding argument was added. In earlier Python versions, or if not specified, the encoding used is the default value used by
# assuming loglevel is bound to the string value obtained from the
# command line argument. Convert to upper case to allow the user to
# specify --log=DEBUG or --log=debug
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
    raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level, ...)
9. While not shown in the above example, an errors argument can also now be passed, which determines how encoding errors are handled. For available values and the default, see the documentation for
# assuming loglevel is bound to the string value obtained from the
# command line argument. Convert to upper case to allow the user to
# specify --log=DEBUG or --log=debug
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
    raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level, ...)
9.

Và bây giờ nếu chúng ta mở tệp và xem xét những gì chúng ta có, chúng ta nên tìm các thông báo nhật ký:

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö

Ví dụ này cũng cho thấy cách bạn có thể đặt mức ghi nhật ký đóng vai trò là ngưỡng để theo dõi. Trong trường hợp này, vì chúng tôi đặt ngưỡng thành

# assuming loglevel is bound to the string value obtained from the
# command line argument. Convert to upper case to allow the user to
# specify --log=DEBUG or --log=debug
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
    raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level, ...)
1, tất cả các tin nhắn đã được in.

Nếu bạn muốn đặt mức ghi nhật ký từ tùy chọn dòng lệnh như:

Và bạn có giá trị của tham số được truyền cho

logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG)
2 trong một số loglevel biến, bạn có thể sử dụng:

getattr(logging, loglevel.upper())

Để có được giá trị mà bạn sẽ chuyển sang

logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG)
3 thông qua đối số cấp độ. Bạn có thể muốn lỗi kiểm tra bất kỳ giá trị đầu vào người dùng nào, có lẽ như trong ví dụ sau:

# assuming loglevel is bound to the string value obtained from the
# command line argument. Convert to upper case to allow the user to
# specify --log=DEBUG or --log=debug
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
    raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level, ...)

Cuộc gọi đến

logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG)
3 sẽ đến trước bất kỳ cuộc gọi nào đến
DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
8,
DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
9, v.v. Nếu không, các chức năng đó sẽ gọi
logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG)
3 cho bạn với các tùy chọn mặc định. Vì nó dự định là một cơ sở cấu hình đơn giản một lần, chỉ có cuộc gọi đầu tiên thực sự sẽ làm bất cứ điều gì: các cuộc gọi tiếp theo là không có hiệu quả.

Nếu bạn chạy tập lệnh trên nhiều lần, các tin nhắn từ các lần chạy liên tiếp sẽ được thêm vào ví dụ tệp.log. Nếu bạn muốn mỗi lần chạy bắt đầu một lần nữa, không nhớ các tin nhắn từ các lần chạy trước đó, bạn có thể chỉ định đối số FILEMODE, bằng cách thay đổi cuộc gọi trong ví dụ trên thành:

logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG)

Đầu ra sẽ giống như trước đây, nhưng tệp nhật ký không còn được thêm vào, vì vậy các tin nhắn từ các lần chạy trước đó bị mất.

Đăng nhập từ nhiều mô -đun

Nếu chương trình của bạn bao gồm nhiều mô -đun, thì đây là một ví dụ về cách bạn có thể sắp xếp đăng nhập vào đó:

# myapp.py
import logging
import mylib

def main():
    logging.basicConfig(filename='myapp.log', level=logging.INFO)
    logging.info('Started')
    mylib.do_something()
    logging.info('Finished')

if __name__ == '__main__':
    main()

# mylib.py
import logging

def do_something():
    logging.info('Doing something')

Nếu bạn chạy myApp.py, bạn sẽ thấy điều này trong myApp.log:

INFO:root:Started
INFO:root:Doing something
INFO:root:Finished

Đó là hy vọng những gì bạn đã mong đợi để xem. Bạn có thể khái quát điều này thành nhiều mô -đun, sử dụng mẫu trong mylib.py. Lưu ý rằng đối với mẫu sử dụng đơn giản này, bạn đã giành chiến thắng, bằng cách xem trong tệp nhật ký, trong đó trong ứng dụng của bạn, tin nhắn của bạn đến, ngoài việc xem xét mô tả sự kiện. Nếu bạn muốn theo dõi vị trí của các tin nhắn của mình, bạn sẽ cần phải tham khảo tài liệu vượt quá cấp độ hướng dẫn - xem hướng dẫn đăng nhập nâng cao.Advanced Logging Tutorial.

Dữ liệu biến ghi nhật ký

Để nhật ký dữ liệu biến, hãy sử dụng chuỗi định dạng cho thông báo Mô tả sự kiện và nối dữ liệu biến làm đối số. Ví dụ:

import logging
logging.warning('%s before you %s', 'Look', 'leap!')

sẽ hiển thị:

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
0

Như bạn có thể thấy, việc hợp nhất dữ liệu biến vào thông báo Mô tả sự kiện sử dụng kiểu cũ, kiểu %của định dạng chuỗi. Đây là để tương thích ngược: Gói ghi nhật ký trước các tùy chọn định dạng mới hơn như

logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG)
8 và
logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG)
9. Các tùy chọn định dạng mới hơn này được hỗ trợ, nhưng khám phá chúng nằm ngoài phạm vi của hướng dẫn này: Xem bằng cách sử dụng các kiểu định dạng cụ thể trong suốt ứng dụng của bạn để biết thêm thông tin.Using particular formatting styles throughout your application for more information.

Thay đổi định dạng của các tin nhắn được hiển thị lor

Để thay đổi định dạng được sử dụng để hiển thị tin nhắn, bạn cần chỉ định định dạng bạn muốn sử dụng:

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
1

cái nào sẽ in:

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
2

Lưu ý rằng ‘root, xuất hiện trong các ví dụ trước đó đã biến mất. Đối với một tập hợp đầy đủ các thứ có thể xuất hiện trong các chuỗi định dạng, bạn có thể tham khảo tài liệu cho các thuộc tính logrecord, nhưng để sử dụng đơn giản, bạn chỉ cần tên mức độ (mức độ nghiêm trọng), tin nhắn (mô tả sự kiện, bao gồm dữ liệu biến) và có lẽ để hiển thị Khi sự kiện xảy ra. Nó được mô tả trong phần sau.LogRecord attributes, but for simple usage, you just need the levelname (severity), message (event description, including variable data) and perhaps to display when the event occurred. This is described in the next section.

Hiển thị ngày/giờ trong Tin nhắn

Để hiển thị ngày và thời gian của một sự kiện, bạn sẽ đặt ‘%(ASCTIME) S trong chuỗi định dạng của bạn:

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
3

Mà sẽ in một cái gì đó như thế này:

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
4

Định dạng mặc định cho hiển thị ngày/thời gian (hiển thị ở trên) giống như ISO8601 hoặc RFC 3339. Nếu bạn cần kiểm soát thêm định dạng ngày/giờ, hãy cung cấp đối số DateFMT cho

# myapp.py
import logging
import mylib

def main():
    logging.basicConfig(filename='myapp.log', level=logging.INFO)
    logging.info('Started')
    mylib.do_something()
    logging.info('Finished')

if __name__ == '__main__':
    main()
0, như trong ví dụ này:RFC 3339. If you need more control over the formatting of the date/time, provide a datefmt argument to
# myapp.py
import logging
import mylib

def main():
    logging.basicConfig(filename='myapp.log', level=logging.INFO)
    logging.info('Started')
    mylib.do_something()
    logging.info('Finished')

if __name__ == '__main__':
    main()
0, as in this example:

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
5

Mà sẽ hiển thị một cái gì đó như thế này:

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
6

Định dạng của đối số DATEFMT giống như được hỗ trợ bởi

# myapp.py
import logging
import mylib

def main():
    logging.basicConfig(filename='myapp.log', level=logging.INFO)
    logging.info('Started')
    mylib.do_something()
    logging.info('Finished')

if __name__ == '__main__':
    main()
1.

Bước tiếp theo¶

Điều đó kết thúc hướng dẫn cơ bản. Nó là đủ để giúp bạn đứng dậy và chạy với ghi nhật ký. Có rất nhiều điều mà gói ghi nhật ký cung cấp, nhưng để tận dụng tốt nhất, bạn sẽ cần phải đầu tư thêm một chút thời gian để đọc các phần sau. Nếu bạn đã sẵn sàng cho điều đó, hãy lấy một số đồ uống yêu thích của bạn và tiếp tục.

Nếu nhu cầu ghi nhật ký của bạn rất đơn giản, thì hãy sử dụng các ví dụ trên để kết hợp ghi nhật ký vào các tập lệnh của riêng bạn và nếu bạn gặp vấn đề hoặc không hiểu điều gì đó, vui lòng đăng một câu hỏi trên nhóm comp.lang.python usenet (có sẵn tại https : //groups.google.com/forum/#! Diễn đàn/comp.lang.python) và bạn sẽ nhận được sự giúp đỡ trước khi quá lâu.

Vẫn ở đây? Bạn có thể tiếp tục đọc một vài phần tiếp theo, cung cấp một hướng dẫn nâng cao/chuyên sâu hơn một chút so với phần cơ bản ở trên. Sau đó, bạn có thể xem sách nấu ăn đăng nhập.Logging Cookbook.

Hướng dẫn đăng nhập nâng cao

Thư viện ghi nhật ký có cách tiếp cận mô -đun và cung cấp một số loại thành phần: loggers, trình xử lý, bộ lọc và định dạng.

  • Loggers hiển thị giao diện mà mã ứng dụng sử dụng trực tiếp.

  • Trình xử lý gửi các bản ghi nhật ký (được tạo bởi loggers) đến đích thích hợp.

  • Các bộ lọc cung cấp một cơ sở hạt mịn hơn để xác định bản ghi nhật ký nào vào đầu ra.

  • Formatters Chỉ định bố cục của các bản ghi nhật ký trong đầu ra cuối cùng.

Thông tin sự kiện nhật ký được truyền giữa loggers, trình xử lý, bộ lọc và định dạng trong một ví dụ

# myapp.py
import logging
import mylib

def main():
    logging.basicConfig(filename='myapp.log', level=logging.INFO)
    logging.info('Started')
    mylib.do_something()
    logging.info('Finished')

if __name__ == '__main__':
    main()
2.

Ghi nhật ký được thực hiện bằng cách gọi các phương thức trên các trường hợp của lớp

# myapp.py
import logging
import mylib

def main():
    logging.basicConfig(filename='myapp.log', level=logging.INFO)
    logging.info('Started')
    mylib.do_something()
    logging.info('Finished')

if __name__ == '__main__':
    main()
3 (sau đây gọi là loggers). Mỗi trường hợp có một tên và chúng được sắp xếp theo khái niệm theo hệ thống phân cấp không gian tên bằng cách sử dụng các dấu chấm (thời kỳ) làm dấu phân cách. Ví dụ: một logger có tên ‘quét, là cha mẹ của loggers‘ scan.text, ‘scan.html, và‘ scan.pdf. Tên logger có thể là bất cứ điều gì bạn muốn và chỉ ra khu vực của một ứng dụng trong đó một tin nhắn đã ghi lại bắt nguồn.

Một quy ước tốt để sử dụng khi đặt tên loggers là sử dụng logger cấp mô-đun, trong mỗi mô-đun sử dụng ghi nhật ký, được đặt tên như sau:

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
7

Điều này có nghĩa là tên logger theo dõi hệ thống phân cấp gói/mô -đun và nó rõ ràng trực giác khi các sự kiện được ghi lại chỉ từ tên logger.

Rễ của hệ thống phân cấp của loggers được gọi là logger gốc. Đó là bộ ghi âm được sử dụng bởi các hàm

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
8,
DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
9,
getattr(logging, loglevel.upper())
0,
getattr(logging, loglevel.upper())
1 và
getattr(logging, loglevel.upper())
2, mà chỉ gọi phương thức đặt tên giống nhau của bộ ghi gốc. Các chức năng và các phương pháp có cùng chữ ký. Tên logger gốc được in dưới dạng ‘root, trong đầu ra đã ghi.

Tất nhiên, đó có thể đăng nhập tin nhắn vào các điểm đến khác nhau. Hỗ trợ được bao gồm trong gói để ghi tin nhắn nhật ký vào các tệp, vị trí HTTP GET/POST, email qua SMTP, ổ cắm chung, hàng đợi hoặc cơ chế ghi nhật ký cụ thể của OS như Syslog hoặc nhật ký sự kiện Windows NT. Các điểm đến được phục vụ bởi các lớp xử lý. Bạn có thể tạo lớp đích đăng nhập của riêng mình nếu bạn có các yêu cầu đặc biệt không được đáp ứng bởi bất kỳ lớp xử lý tích hợp nào.

Theo mặc định, không có đích nào được đặt cho bất kỳ tin nhắn ghi nhật ký nào. Bạn có thể chỉ định một đích (chẳng hạn như bảng điều khiển hoặc tệp) bằng cách sử dụng

logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG)
3 như trong các ví dụ hướng dẫn. Nếu bạn gọi các chức năng
DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
8,
DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
9,
getattr(logging, loglevel.upper())
0,
getattr(logging, loglevel.upper())
1 và
getattr(logging, loglevel.upper())
2, họ sẽ kiểm tra xem có điểm đến nào được đặt không; và nếu một người không được đặt, họ sẽ đặt đích của bảng điều khiển (
# mylib.py
import logging

def do_something():
    logging.info('Doing something')
5) và định dạng mặc định cho thông báo được hiển thị trước khi ủy thác cho bộ ghi gốc để thực hiện đầu ra thông báo thực tế.

Định dạng mặc định được đặt bởi

logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG)
3 cho tin nhắn là:

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
8

Bạn có thể thay đổi điều này bằng cách chuyển một chuỗi định dạng sang

logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG)
3 với đối số từ khóa định dạng. Đối với tất cả các tùy chọn liên quan đến cách xây dựng chuỗi định dạng, hãy xem các đối tượng Formatter.Formatter Objects.

Lưu lượng ghi nhật ký

Dòng thông tin sự kiện nhật ký trong loggers và trình xử lý được minh họa trong sơ đồ sau.

Hướng dẫn logging only info python - chỉ ghi nhật ký thông tin python

Người khai thác gỗ¶

# myapp.py
import logging
import mylib

def main():
    logging.basicConfig(filename='myapp.log', level=logging.INFO)
    logging.info('Started')
    mylib.do_something()
    logging.info('Finished')

if __name__ == '__main__':
    main()
3 Đối tượng có một công việc ba lần. Đầu tiên, họ hiển thị một số phương thức vào mã ứng dụng để các ứng dụng có thể đăng nhập tin nhắn khi chạy. Thứ hai, các đối tượng logger xác định thông báo nhật ký nào sẽ hoạt động dựa trên mức độ nghiêm trọng (cơ sở lọc mặc định) hoặc các đối tượng bộ lọc. Thứ ba, các đối tượng logger chuyển các tin nhắn nhật ký có liên quan cho tất cả các trình xử lý nhật ký quan tâm.

Các phương thức được sử dụng rộng rãi nhất trên các đối tượng logger rơi vào hai loại: cấu hình và gửi tin nhắn.

Đây là những phương pháp cấu hình phổ biến nhất:

  • # mylib.py
    import logging
    
    def do_something():
        logging.info('Doing something')
    
    9 Chỉ định thông báo nhật ký mức độ nghiêm trọng thấp nhất mà logger sẽ xử lý, trong đó gỡ lỗi là mức độ nghiêm trọng tích hợp thấp nhất và quan trọng là mức độ nghiêm trọng tích hợp cao nhất. Ví dụ: nếu mức độ nghiêm trọng là thông tin, logger sẽ chỉ xử lý thông tin, cảnh báo, lỗi và tin nhắn quan trọng và sẽ bỏ qua các tin nhắn gỡ lỗi.

  • INFO:root:Started
    INFO:root:Doing something
    INFO:root:Finished
    
    0 và
    INFO:root:Started
    INFO:root:Doing something
    INFO:root:Finished
    
    1 Thêm và xóa các đối tượng xử lý khỏi đối tượng logger. Người xử lý được đề cập chi tiết hơn trong người xử lý.Handlers.

  • INFO:root:Started
    INFO:root:Doing something
    INFO:root:Finished
    
    2 và
    INFO:root:Started
    INFO:root:Doing something
    INFO:root:Finished
    
    3 Thêm và xóa các đối tượng bộ lọc khỏi đối tượng logger. Bộ lọc được đề cập chi tiết hơn trong các đối tượng bộ lọc.Filter Objects.

Bạn không cần phải luôn gọi các phương thức này trên mọi logger bạn tạo. Xem hai đoạn cuối cùng trong phần này.

Với đối tượng logger được định cấu hình, các phương thức sau tạo thông báo nhật ký:

  • INFO:root:Started
    INFO:root:Doing something
    INFO:root:Finished
    
    4,
    INFO:root:Started
    INFO:root:Doing something
    INFO:root:Finished
    
    5,
    INFO:root:Started
    INFO:root:Doing something
    INFO:root:Finished
    
    6,
    INFO:root:Started
    INFO:root:Doing something
    INFO:root:Finished
    
    7 và
    INFO:root:Started
    INFO:root:Doing something
    INFO:root:Finished
    
    8 đều tạo bản ghi nhật ký với một thông báo và mức tương ứng với tên phương thức tương ứng của chúng. Thông báo thực sự là một chuỗi định dạng, có thể chứa cú pháp thay thế chuỗi tiêu chuẩn là
    INFO:root:Started
    INFO:root:Doing something
    INFO:root:Finished
    
    9,
    import logging
    logging.warning('%s before you %s', 'Look', 'leap!')
    
    0,
    import logging
    logging.warning('%s before you %s', 'Look', 'leap!')
    
    1, v.v. Phần còn lại của các đối số của họ là một danh sách các đối tượng tương ứng với các trường thay thế trong tin nhắn. Liên quan đến
    import logging
    logging.warning('%s before you %s', 'Look', 'leap!')
    
    2, các phương thức ghi nhật ký chỉ quan tâm đến từ khóa của
    import logging
    logging.warning('%s before you %s', 'Look', 'leap!')
    
    3 và sử dụng nó để xác định xem có đăng nhập thông tin ngoại lệ hay không.

  • import logging
    logging.warning('%s before you %s', 'Look', 'leap!')
    
    4 Tạo một thông báo nhật ký tương tự như
    INFO:root:Started
    INFO:root:Doing something
    INFO:root:Finished
    
    7. Sự khác biệt là
    import logging
    logging.warning('%s before you %s', 'Look', 'leap!')
    
    4 bỏ một dấu vết ngăn xếp cùng với nó. Chỉ gọi phương thức này từ một người xử lý ngoại lệ.

  • import logging
    logging.warning('%s before you %s', 'Look', 'leap!')
    
    7 lấy một mức nhật ký làm đối số rõ ràng. Đây là một chút dài dòng cho các tin nhắn ghi nhật ký so với sử dụng các phương thức tiện lợi ở cấp độ nhật ký được liệt kê ở trên, nhưng đây là cách đăng nhập ở các cấp nhật ký tùy chỉnh.

import logging
logging.warning('%s before you %s', 'Look', 'leap!')
8 Trả về một tham chiếu đến một thể hiện logger với tên được chỉ định nếu nó được cung cấp hoặc
import logging
logging.warning('%s before you %s', 'Look', 'leap!')
9 nếu không. Các tên là các cấu trúc phân cấp được phân tách thời kỳ. Nhiều cuộc gọi đến
import logging
logging.warning('%s before you %s', 'Look', 'leap!')
8 có cùng tên sẽ trả về một tham chiếu đến cùng một đối tượng logger. Loggers nằm hơn nữa trong danh sách phân cấp là trẻ em của loggers cao hơn trong danh sách. Ví dụ, được đưa ra một logger có tên là
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
01, loggers có tên của
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
02,
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
03 và
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
04 đều là hậu duệ của
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
01.

Loggers có một khái niệm về mức độ hiệu quả. Nếu một cấp độ không được đặt rõ ràng trên logger, mức độ của cha mẹ được sử dụng thay vào đó làm mức hiệu quả. Nếu cha mẹ không có cấp cấp rõ ràng, cha mẹ của nó được kiểm tra, v.v. - tất cả các tổ tiên được tìm kiếm cho đến khi tìm thấy cấp độ được thiết lập rõ ràng. Logger gốc luôn có một mức cấp rõ ràng (theo mặc định ____43). Khi quyết định có xử lý một sự kiện hay không, mức độ hiệu quả của logger được sử dụng để xác định xem sự kiện có được chuyển cho trình xử lý logger hay không.

Những người đăng nhập trẻ em tuyên truyền các thông điệp lên đến những người xử lý liên quan đến loggers tổ tiên của họ. Bởi vì điều này, 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 loggers mà ứng dụng sử dụng. Nó là đủ để định cấu hình trình xử lý cho một bộ ghi cấp cấp cao nhất và tạo bộ ghi nhật ký con khi cần thiết. .

Người xử lý và

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
08 Các đối tượng chịu trách nhiệm gửi các tin nhắn nhật ký thích hợp (dựa trên thông báo nhật ký Mức độ nghiêm trọng) đối với điểm đến được chỉ định của Handler. Các đối tượng
# myapp.py
import logging
import mylib

def main():
    logging.basicConfig(filename='myapp.log', level=logging.INFO)
    logging.info('Started')
    mylib.do_something()
    logging.info('Finished')

if __name__ == '__main__':
    main()
3 có thể thêm các đối tượng xử lý bằng 0 hoặc nhiều hơn với phương thức
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
10. Là một kịch bản ví dụ, một ứng dụng có thể muốn gửi tất cả các thông báo nhật ký đến tệp nhật ký, tất cả các thông báo nhật ký lỗi hoặc cao hơn cho stdout và tất cả các thông báo quan trọng đến địa chỉ email. Kịch bản này yêu cầu ba trình xử lý riêng lẻ trong đó mỗi người xử lý chịu trách nhiệm gửi tin nhắn về mức độ nghiêm trọng cụ thể đến một địa điểm cụ thể.

Thư viện tiêu chuẩn bao gồm khá nhiều loại xử lý (xem Trình xử lý hữu ích); Các hướng dẫn sử dụng chủ yếu

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
11 và
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
12 trong các ví dụ của nó.Useful Handlers); the tutorials use mainly
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
11 and
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
12 in its examples.

Có rất ít phương pháp trong một người xử lý cho các nhà phát triển ứng dụng quan tâm đến bản thân. Các phương thức xử lý duy nhất có vẻ phù hợp với các nhà phát triển ứng dụng đang sử dụng các đối tượng xử lý tích hợp (nghĩa là không tạo trình xử lý tùy chỉnh) là các phương thức cấu hình sau:

  • Phương pháp

    import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    13, giống như trong các đối tượng logger, chỉ định mức độ nghiêm trọng thấp nhất sẽ được gửi đến đích thích hợp. Tại sao có hai phương pháp
    import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    13? Mức được đặt trong logger xác định mức độ nghiêm trọng của tin nhắn mà nó sẽ chuyển cho người xử lý. Cấp độ được đặt trong mỗi người xử lý xác định tin nhắn mà Handler sẽ gửi.

  • import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    15 chọn một đối tượng định dạng cho người xử lý này sử dụng.

  • import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    16 và
    import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    17 Cấu hình và cấu hình các đối tượng bộ lọc trên trình xử lý.

Mã ứng dụng không nên trực tiếp khởi tạo và sử dụng các trường hợp là

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
08. Thay vào đó, lớp
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
08 là một lớp cơ sở xác định giao diện mà tất cả các trình xử lý nên có và thiết lập một số hành vi mặc định mà các lớp con có thể sử dụng (hoặc ghi đè).

Định dạng

Các đối tượng Formatter định cấu hình thứ tự, cấu trúc và nội dung cuối cùng của thông báo nhật ký. Không giống như lớp cơ sở

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
20, mã ứng dụng có thể khởi tạo các lớp định dạng, mặc dù bạn có thể phân lớp định dạng nếu ứng dụng của bạn cần hành vi đặc biệt. Trình xây dựng có ba đối số tùy chọn - chuỗi định dạng tin nhắn, chuỗi định dạng ngày và chỉ báo kiểu.

________ 121 ________ 122 (fmt = none, datefmt = none, style = '%') ¶(fmt=None, datefmt=None, style='%')

Nếu không có chuỗi định dạng tin nhắn, mặc định là sử dụng thông báo RAW. Nếu không có chuỗi định dạng ngày, định dạng ngày mặc định là:

với các mili giây đã được giải quyết vào cuối.

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
23 là một trong những %, ‘{{hoặc‘ $ $. Nếu một trong số này không được chỉ định, thì ‘%sẽ được sử dụng.

Nếu

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
23 là ‘%, thì chuỗi định dạng thông báo sử dụng
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
25 Thay thế chuỗi theo kiểu; Các khóa có thể được ghi lại trong các thuộc tính logrecord. Nếu kiểu là ‘{, chuỗi định dạng tin nhắn được giả sử là tương thích với
logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG)
8 (sử dụng các đối số từ khóa), trong khi nếu kiểu này là’ $, thì chuỗi định dạng tin nhắn sẽ phù hợp với những gì được mong đợi bởi
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
27.LogRecord attributes. If the style is ‘{’, the message format string is assumed to be compatible with
logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG)
8 (using keyword arguments), while if the style is ‘$’ then the message format string should conform to what is expected by
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
27.

Đã thay đổi trong phiên bản 3.2: Đã thêm tham số

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
23.Added the
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
23 parameter.

Chuỗi định dạng thông báo sau đây sẽ ghi lại thời gian ở định dạng có thể đọc được của con người, mức độ nghiêm trọng của tin nhắn và nội dung của tin nhắn, theo thứ tự đó:

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
9

Formatters sử dụng chức năng có thể định cấu hình người dùng để chuyển đổi thời gian tạo của bản ghi thành một tuple. Theo mặc định,

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
29 được sử dụng; Để thay đổi điều này cho một thể hiện định dạng cụ thể, hãy đặt thuộc tính
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
30 của phiên bản thành hàm có cùng chữ ký với
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
29 hoặc
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
32. Để thay đổi nó cho tất cả các định dạng, ví dụ, nếu bạn muốn tất cả thời gian đăng nhập được hiển thị trong GMT, hãy đặt thuộc tính
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
30 trong lớp định dạng (thành
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
34 cho hiển thị GMT).

Định cấu hình ghi nhật ký

Các lập trình viên có thể định cấu hình đăng nhập theo ba cách:

  1. Tạo loggers, trình xử lý và định dạng rõ ràng bằng cách sử dụng mã Python gọi các phương thức cấu hình được liệt kê ở trên.

  2. Tạo tệp cấu hình ghi nhật ký và đọc nó bằng hàm

    import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    35.

  3. Tạo một từ điển thông tin cấu hình và chuyển nó đến hàm

    import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    36.

Đối với tài liệu tham khảo về hai tùy chọn cuối cùng, xem các chức năng cấu hình. Ví dụ sau đây định cấu hình một bộ ghi âm rất đơn giản, trình xử lý bảng điều khiển và một định dạng đơn giản bằng cách sử dụng mã Python:Configuration functions. The following example configures a very simple logger, a console handler, and a simple formatter using Python code:

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
0

Chạy mô -đun này từ dòng lệnh tạo ra đầu ra sau:

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
1

Mô -đun Python sau đây tạo ra một logger, người xử lý và định dạng gần giống với các mô -đun trong ví dụ được liệt kê ở trên, với sự khác biệt duy nhất là tên của các đối tượng:

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
2

Đây là tệp đăng nhập.conf:

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
3

Đầu ra gần giống với ví dụ không dựa trên tệp-file:

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
4

Bạn có thể thấy rằng cách tiếp cận tệp cấu hình có một vài lợi thế so với cách tiếp cận mã Python, chủ yếu phân tách cấu hình và mã và khả năng của những người không kiểm duyệt để dễ dàng sửa đổi các thuộc tính ghi nhật ký.

Cảnh báo

Hàm

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
35 có tham số mặc định,
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
38, mặc định là
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
39 vì lý do tương thích ngược. Điều này có thể hoặc không phải là những gì bạn muốn, vì nó sẽ gây ra bất kỳ bộ ghi nhật ký không root nào trước khi cuộc gọi
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
35 bị vô hiệu hóa trừ khi chúng (hoặc tổ tiên) được đặt tên rõ ràng trong cấu hình. Vui lòng tham khảo tài liệu tham khảo để biết thêm thông tin và chỉ định
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
07 cho tham số này nếu bạn muốn.

Từ điển được chuyển đến

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
36 cũng có thể chỉ định giá trị boolean với khóa
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
38, nếu không được chỉ định rõ ràng trong từ điển cũng mặc định được hiểu là
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
39. Điều này dẫn đến hành vi phân tích logger được mô tả ở trên, có thể không phải là những gì bạn muốn - trong trường hợp đó, cung cấp chính một cách rõ ràng với giá trị
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
07.

Lưu ý rằng các tên lớp được tham chiếu trong các tệp cấu hình cần phải liên quan đến mô -đun ghi nhật ký hoặc các giá trị tuyệt đối có thể được giải quyết bằng cách sử dụng các cơ chế nhập thông thường. Do đó, bạn có thể sử dụng

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
46 (liên quan đến mô -đun ghi nhật ký) hoặc
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
47 (đối với một lớp được xác định trong gói
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
48 và mô -đun
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
49, trong đó
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
48 có sẵn trên đường dẫn nhập Python).

Trong Python 3.2, một phương tiện mới để định cấu hình ghi nhật ký đã được giới thiệu, sử dụng từ điển để giữ thông tin cấu hình. Điều này cung cấp một superset của chức năng của cách tiếp cận dựa trên tệp cấu hình được nêu ở trên và là phương thức cấu hình được đề xuất cho các ứng dụng và triển khai mới. Bởi vì một từ điển Python được sử dụng để chứa thông tin cấu hình và vì bạn có thể điền từ điển đó bằng các phương tiện khác nhau, bạn có nhiều tùy chọn hơn cho cấu hình. Ví dụ: bạn có thể sử dụng tệp cấu hình ở định dạng JSON hoặc, nếu bạn có quyền truy cập vào chức năng xử lý YAML, một tệp ở định dạng YAML, để điền vào Từ điển cấu hình. Hoặc, tất nhiên, bạn có thể xây dựng từ điển trong mã Python, nhận nó ở dạng ngâm trên một ổ cắm hoặc sử dụng bất kỳ cách tiếp cận nào có ý nghĩa cho ứng dụng của bạn.

Ở đây, một ví dụ về cấu hình tương tự như trên, ở định dạng YAML cho cách tiếp cận dựa trên từ điển mới:

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
5

Để biết thêm thông tin về việc đăng nhập bằng từ điển, hãy xem các chức năng cấu hình.Configuration functions.

Điều gì xảy ra nếu không có cấu hình nào được cung cấp Jo

Nếu không có cấu hình ghi nhật ký được cung cấp, có thể có một tình huống trong đó một sự kiện ghi nhật ký cần phải được đầu ra, nhưng không có người xử lý nào có thể được tìm thấy để xuất hiện sự kiện. Hành vi của gói ghi nhật ký trong những trường hợp này phụ thuộc vào phiên bản Python.

Đối với các phiên bản của Python trước 3.2, hành vi như sau:

  • Nếu ghi nhật ký.RAISEEXEXTIES là

    import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    07 (chế độ sản xuất), sự kiện này được giảm âm thầm.

  • Nếu ghi nhật ký.raiseexceptions là

    import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    39 (chế độ phát triển), một thông báo ‘không có người xử lý nào có thể được tìm thấy cho logger x.y.z, được in một lần.

Trong Python 3.2 trở lên, hành vi như sau:

  • Sự kiện này là đầu ra bằng cách sử dụng ‘người xử lý cuối cùng, được lưu trữ trong

    import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    53. Trình xử lý nội bộ này không được liên kết với bất kỳ logger nào và hoạt động giống như
    import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    11 viết thông báo mô tả sự kiện vào giá trị hiện tại của
    # mylib.py
    import logging
    
    def do_something():
        logging.info('Doing something')
    
    5 (do đó tôn trọng bất kỳ chuyển hướng nào có thể có hiệu lực). Không có định dạng nào được thực hiện trên tin nhắn - chỉ là thông báo mô tả sự kiện trần được in. Cấp độ Handler được đặt thành
    # assuming loglevel is bound to the string value obtained from the
    # command line argument. Convert to upper case to allow the user to
    # specify --log=DEBUG or --log=debug
    numeric_level = getattr(logging, loglevel.upper(), None)
    if not isinstance(numeric_level, int):
        raise ValueError('Invalid log level: %s' % loglevel)
    logging.basicConfig(level=numeric_level, ...)
    
    3, vì vậy tất cả các sự kiện ở mức độ này và mức độ nghiêm trọng lớn hơn sẽ được đầu ra.

Để có được hành vi trước 3,2,

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
53 có thể được đặt thành
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
58.

Định cấu hình ghi nhật ký cho thư viện

Khi phát triển một thư viện sử dụng ghi nhật ký, bạn nên cẩn thận để ghi lại cách thư viện sử dụng ghi nhật ký - ví dụ: tên của loggers được sử dụng. Một số xem xét cũng cần được cung cấp cho cấu hình ghi nhật ký của nó. Nếu ứng dụng sử dụng không sử dụng ghi nhật ký và mã thư viện thực hiện các cuộc gọi ghi nhật ký, thì (như được mô tả trong phần trước) Các sự kiện về mức độ nghiêm trọng

# assuming loglevel is bound to the string value obtained from the
# command line argument. Convert to upper case to allow the user to
# specify --log=DEBUG or --log=debug
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
    raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level, ...)
3 và lớn hơn sẽ được in thành
# mylib.py
import logging

def do_something():
    logging.info('Doing something')
5. Đây được coi là hành vi mặc định tốt nhất.

Nếu vì một lý do nào đó, bạn không muốn những tin nhắn này được in trong trường hợp không có bất kỳ cấu hình ghi nhật ký nào, bạn có thể đính kèm trình xử lý không làm gì vào bộ ghi cấp cao nhất cho thư viện của bạn. Điều này tránh được thông điệp được in, vì một trình xử lý sẽ luôn được tìm thấy cho các sự kiện thư viện: nó không tạo ra bất kỳ đầu ra nào. Nếu người dùng thư viện định cấu hình ghi nhật ký để sử dụng ứng dụng, có lẽ cấu hình đó sẽ thêm một số trình xử lý và nếu các cấp được cấu hình phù hợp thì các cuộc gọi đăng nhập được thực hiện trong mã thư viện sẽ gửi đầu ra cho những người xử lý đó là bình thường.

Một trình xử lý không có gì được bao gồm trong gói ghi nhật ký:

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
61 (kể từ Python 3.1). Một thể hiện của trình xử lý này có thể được thêm vào bộ ghi cấp cao nhất của không gian tên ghi nhật ký được sử dụng bởi thư viện (nếu bạn muốn ngăn thư viện của bạn các sự kiện ghi nhật ký của bạn được xuất ra
# mylib.py
import logging

def do_something():
    logging.info('Doing something')
5 trong trường hợp không có cấu hình ghi nhật ký). Nếu tất cả việc đăng nhập bởi một thư viện foo được thực hiện bằng cách sử dụng loggers có tên khớp ‘foo.x,‘ foo.x.y, v.v. thì mã:

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
6

Nên có hiệu ứng mong muốn. Nếu một tổ chức tạo ra một số thư viện, thì tên logger được chỉ định có thể là ‘orgname.foo, chứ không chỉ là‘ foo.

Ghi chú

Chúng tôi khuyên bạn không nên thêm bất kỳ trình xử lý nào ngoài

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
61 vào loggers thư viện của bạn. Điều này là do cấu hình của trình xử lý là đặc quyền của nhà phát triển ứng dụng sử dụng thư viện của bạn. Nhà phát triển ứng dụng biết đối tượng mục tiêu của họ và những người xử lý thích hợp nhất cho ứng dụng của họ: Nếu bạn thêm trình xử lý ‘dưới mui xe, bạn cũng có thể can thiệp vào khả năng thực hiện các bài kiểm tra đơn vị và cung cấp nhật ký phù hợp với yêu cầu của họ.

Mức ghi nhật ký

Các giá trị số của các mức ghi nhật ký được đưa ra trong bảng sau. Đây chủ yếu được quan tâm nếu bạn muốn xác định cấp độ của riêng bạn và cần chúng có các giá trị cụ thể liên quan đến các cấp độ được xác định trước. Nếu bạn xác định một mức có cùng giá trị số, nó sẽ ghi đè lên giá trị được xác định trước; Tên được xác định trước bị mất.

Mức độ

Giá trị số

# assuming loglevel is bound to the string value obtained from the
# command line argument. Convert to upper case to allow the user to
# specify --log=DEBUG or --log=debug
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
    raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level, ...)
5

50

# assuming loglevel is bound to the string value obtained from the
# command line argument. Convert to upper case to allow the user to
# specify --log=DEBUG or --log=debug
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
    raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level, ...)
4

40

# assuming loglevel is bound to the string value obtained from the
# command line argument. Convert to upper case to allow the user to
# specify --log=DEBUG or --log=debug
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
    raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level, ...)
3

30

# assuming loglevel is bound to the string value obtained from the
# command line argument. Convert to upper case to allow the user to
# specify --log=DEBUG or --log=debug
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
    raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level, ...)
2

20

# assuming loglevel is bound to the string value obtained from the
# command line argument. Convert to upper case to allow the user to
# specify --log=DEBUG or --log=debug
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
    raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level, ...)
1

10

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
69

0

Các cấp độ cũng có thể được liên kết với logger, được đặt bởi nhà phát triển hoặc thông qua việc tải cấu hình ghi nhật ký đã lưu. Khi một phương thức ghi nhật ký được gọi trên logger, logger sẽ so sánh mức của chính nó với mức được liên kết với lệnh gọi phương thức. Nếu cấp độ logger cao hơn phương thức gọi, thì không có thông báo ghi nhật ký nào được tạo. Đây là cơ chế cơ bản kiểm soát tính phân từ của đầu ra ghi nhật ký.

Tin nhắn ghi nhật ký được mã hóa dưới dạng các trường hợp của lớp

# myapp.py
import logging
import mylib

def main():
    logging.basicConfig(filename='myapp.log', level=logging.INFO)
    logging.info('Started')
    mylib.do_something()
    logging.info('Finished')

if __name__ == '__main__':
    main()
2. Khi một logger quyết định thực sự đăng nhập một sự kiện, một thể hiện
# myapp.py
import logging
import mylib

def main():
    logging.basicConfig(filename='myapp.log', level=logging.INFO)
    logging.info('Started')
    mylib.do_something()
    logging.info('Finished')

if __name__ == '__main__':
    main()
2 được tạo từ thông báo ghi nhật ký.

Tin nhắn ghi nhật ký phải tuân theo một cơ chế điều phối thông qua việc sử dụng trình xử lý, đó là các trường hợp của các lớp con của lớp

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
08. Người xử lý chịu trách nhiệm đảm bảo rằng một tin nhắn đã đăng nhập (dưới dạng
# myapp.py
import logging
import mylib

def main():
    logging.basicConfig(filename='myapp.log', level=logging.INFO)
    logging.info('Started')
    mylib.do_something()
    logging.info('Finished')

if __name__ == '__main__':
    main()
2) kết thúc ở một vị trí cụ thể (hoặc tập hợp các vị trí) hữu ích cho đối tượng mục tiêu cho thông báo đó (như người dùng cuối, nhân viên bàn hỗ trợ, hệ thống Quản trị viên, nhà phát triển). Người xử lý được thông qua
# myapp.py
import logging
import mylib

def main():
    logging.basicConfig(filename='myapp.log', level=logging.INFO)
    logging.info('Started')
    mylib.do_something()
    logging.info('Finished')

if __name__ == '__main__':
    main()
2 trường hợp dành cho các điểm đến cụ thể. Mỗi logger có thể có số 0, một hoặc nhiều trình xử lý được liên kết với nó (thông qua phương pháp
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
10 của
# myapp.py
import logging
import mylib

def main():
    logging.basicConfig(filename='myapp.log', level=logging.INFO)
    logging.info('Started')
    mylib.do_something()
    logging.info('Finished')

if __name__ == '__main__':
    main()
3). Ngoài bất kỳ trình xử lý nào được liên kết trực tiếp với logger, tất cả các trình xử lý được liên kết với tất cả các tổ tiên của logger được gọi để gửi tin nhắn (trừ khi cờ truyền cho logger được đặt thành giá trị sai, tại điểm chuyển đến người xử lý tổ tiên dừng lại ).

Giống như đối với loggers, người xử lý có thể có các cấp độ liên quan đến chúng. Một cấp độ Handler, hoạt động như một bộ lọc theo cách tương tự như cấp độ logger. Nếu một người xử lý quyết định thực sự gửi một sự kiện, phương thức

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
77 được sử dụng để gửi tin nhắn đến đích. Hầu hết các lớp con do người dùng xác định của
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
08 sẽ cần phải ghi đè lên
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
77 này.

Cấp độ tùy chỉnh

Xác định cấp độ của riêng bạn là có thể, nhưng không cần thiết, vì các cấp độ hiện tại đã được chọn trên cơ sở kinh nghiệm thực tế. Tuy nhiên, nếu bạn bị thuyết phục rằng bạn cần các cấp độ tùy chỉnh, nên được thực hiện cẩn thận khi làm điều này và có thể là một ý tưởng rất tồi để xác định các cấp tùy chỉnh nếu bạn đang phát triển thư viện. Đó là bởi vì nếu nhiều tác giả thư viện đều xác định các cấp tùy chỉnh của riêng họ, có khả năng đầu ra ghi nhật ký từ nhiều thư viện như vậy được sử dụng cùng nhau sẽ khó sử dụng nhà phát triển để kiểm soát và/hoặc giải thích cho các thư viện khác nhau.

Người xử lý hữu ích

Ngoài lớp cơ sở

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
08, nhiều lớp con hữu ích được cung cấp:

  1. import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    11 Các trường hợp gửi tin nhắn đến các luồng (các đối tượng giống như tệp).

  2. import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    12 Các trường hợp gửi tin nhắn đến các tệp đĩa.

  3. import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    83 là lớp cơ sở cho trình xử lý xoay các tệp nhật ký tại một điểm nhất định. Nó không có nghĩa là được khởi tạo trực tiếp. Thay vào đó, sử dụng
    import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    84 hoặc
    import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    85.

  4. import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    84 Các trường hợp gửi tin nhắn đến các tệp đĩa, với sự hỗ trợ cho kích thước tệp nhật ký tối đa và xoay tệp nhật ký.

  5. import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    85 Các trường hợp gửi tin nhắn đến các tệp đĩa, xoay tệp nhật ký theo các khoảng thời gian nhất định.

  6. import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    88 Các trường hợp gửi tin nhắn đến ổ cắm TCP/IP. Kể từ 3,4, ổ cắm miền UNIX cũng được hỗ trợ.

  7. import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    89 Các trường hợp gửi tin nhắn đến ổ cắm UDP. Kể từ 3,4, ổ cắm miền UNIX cũng được hỗ trợ.

  8. import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    90 Các trường hợp gửi tin nhắn đến một địa chỉ email được chỉ định.

  9. import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    91 Các trường hợp gửi tin nhắn đến trình nền Syslog Unix, có thể trên một máy từ xa.

  10. import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    92 Các trường hợp gửi tin nhắn đến nhật ký sự kiện Windows NT/2000/XP.

  11. import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    93 Các trường hợp gửi tin nhắn đến bộ đệm trong bộ nhớ, được xóa bất cứ khi nào đáp ứng các tiêu chí cụ thể.

  12. import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    94 Các trường hợp gửi tin nhắn đến máy chủ HTTP bằng cách sử dụng ngữ nghĩa
    import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    95 hoặc
    import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    96.

  13. import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    46 Các trường hợp xem tệp họ đang đăng nhập. Nếu tệp thay đổi, nó được đóng và mở lại bằng tên tệp. Người xử lý này chỉ hữu ích trên các hệ thống giống như Unix; Windows không hỗ trợ cơ chế cơ bản được sử dụng.

  14. import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    98 Các trường hợp gửi tin nhắn đến một hàng đợi, chẳng hạn như các trường hợp được thực hiện trong các mô -đun
    import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    99 hoặc
    DEBUG:root:This message should go to the log file
    INFO:root:So should this
    WARNING:root:And this, too
    ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
    
    00.

  15. import logging
    logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
    
    61 Các phiên bản không làm gì với thông báo lỗi. Chúng được sử dụng bởi các nhà phát triển thư viện muốn sử dụng ghi nhật ký, nhưng muốn tránh ‘không có trình xử lý nào có thể được tìm thấy cho thông báo logger xxx, có thể được hiển thị nếu người dùng thư viện không cấu hình ghi nhật ký. Xem Cấu hình đăng nhập cho một thư viện để biết thêm thông tin.Configuring Logging for a Library for more information.

Các lớp

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
61,
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
11 và
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
12 được xác định trong gói ghi nhật ký lõi. Các bộ xử lý khác được xác định trong mô-đun phụ,
DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
05. (Ngoài ra còn có một mô hình phụ khác,
DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
06, cho chức năng cấu hình.)

Tin nhắn đã đăng nhập được định dạng để trình bày thông qua các trường hợp của lớp

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
07. Chúng được khởi tạo với một chuỗi định dạng phù hợp để sử dụng với toán tử % và từ điển.

Để định dạng nhiều tin nhắn trong một đợt, có thể sử dụng các phiên bản

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
08. Ngoài chuỗi định dạng (được áp dụng cho mỗi thông báo trong đợt), còn có điều khoản cho chuỗi định dạng tiêu đề và rơ moóc.

Khi lọc dựa trên mức độ logger và/hoặc trình xử lý là không đủ, các trường hợp của

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
09 có thể được thêm vào cả hai trường hợp
# myapp.py
import logging
import mylib

def main():
    logging.basicConfig(filename='myapp.log', level=logging.INFO)
    logging.info('Started')
    mylib.do_something()
    logging.info('Finished')

if __name__ == '__main__':
    main()
3 và
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
08 (thông qua phương thức
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
16 của chúng). Trước khi quyết định xử lý một thông báo thêm, cả loggers và người xử lý đều tham khảo tất cả các bộ lọc của họ để được phép. Nếu bất kỳ bộ lọc nào trả về một giá trị sai, thông báo không được xử lý thêm.

Chức năng

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
09 cơ bản cho phép lọc theo tên logger cụ thể. Nếu tính năng này được sử dụng, các tin nhắn được gửi đến logger được đặt tên và con cái của nó được phép thông qua bộ lọc và tất cả các tin nhắn khác đã bị rơi.

Ngoại lệ được nâng lên trong quá trình ghi nhật ký

Gói ghi nhật ký được thiết kế để nuốt các ngoại lệ xảy ra trong khi đăng nhập vào sản xuất. Điều này là do đó các lỗi xảy ra trong khi xử lý các sự kiện ghi nhật ký - chẳng hạn như ghi nhật ký sai, mạng hoặc các lỗi tương tự khác - không khiến ứng dụng sử dụng đăng nhập để chấm dứt sớm.

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
14 và
DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
15 ngoại lệ không bao giờ bị nuốt. Các trường hợp ngoại lệ khác xảy ra trong phương pháp
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
77 của lớp con
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
08 được chuyển sang phương pháp
DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
18 của nó.

Việc triển khai mặc định của

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
18 trong
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
08 kiểm tra xem liệu biến cấp độ mô-đun,
DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
21, có được đặt không. Nếu được đặt, một dấu vết được in thành
# mylib.py
import logging

def do_something():
    logging.info('Doing something')
5. Nếu không được đặt, ngoại lệ bị nuốt.

Ghi chú

Giá trị mặc định của

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
21 là
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
39. Điều này là do trong quá trình phát triển, bạn thường muốn được thông báo về bất kỳ trường hợp ngoại lệ nào xảy ra. Nó khuyên bạn nên đặt
DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
21 thành
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
07 để sử dụng sản xuất.

Sử dụng các đối tượng tùy ý làm tin nhắn lor

Trong các phần trước và ví dụ, người ta đã giả định rằng thông báo được truyền khi đăng nhập sự kiện là một chuỗi. Tuy nhiên, đây không phải là khả năng duy nhất. Bạn có thể truyền một đối tượng tùy ý dưới dạng thông báo và phương thức

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
27 của nó sẽ được gọi khi hệ thống ghi nhật ký cần chuyển đổi nó thành biểu diễn chuỗi. Trên thực tế, nếu bạn muốn, bạn có thể tránh tính toán hoàn toàn một đại diện chuỗi - ví dụ:
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
88 phát ra một sự kiện bằng cách ngâm nó và gửi nó qua dây.

Tối ưu hóa¶

Định dạng của các đối số tin nhắn được hoãn lại cho đến khi không thể tránh được. Tuy nhiên, việc tính toán các đối số được chuyển cho phương thức ghi nhật ký cũng có thể tốn kém và bạn có thể muốn tránh làm điều đó nếu logger sẽ loại bỏ sự kiện của bạn. Để quyết định phải làm gì, bạn có thể gọi phương thức

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
29 có đối số cấp độ và trả về đúng nếu sự kiện sẽ được tạo bởi logger cho mức độ gọi đó. Bạn có thể viết mã như thế này:

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
7

Vì vậy, nếu ngưỡng của logger được đặt ở trên

# assuming loglevel is bound to the string value obtained from the
# command line argument. Convert to upper case to allow the user to
# specify --log=DEBUG or --log=debug
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
    raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level, ...)
1, các cuộc gọi đến
DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
31 và
DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
32 không bao giờ được thực hiện.

Ghi chú

Giá trị mặc định của

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
21 là
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
39. Điều này là do trong quá trình phát triển, bạn thường muốn được thông báo về bất kỳ trường hợp ngoại lệ nào xảy ra. Nó khuyên bạn nên đặt
DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
21 thành
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
07 để sử dụng sản xuất.

Sử dụng các đối tượng tùy ý làm tin nhắn lor

Trong các phần trước và ví dụ, người ta đã giả định rằng thông báo được truyền khi đăng nhập sự kiện là một chuỗi. Tuy nhiên, đây không phải là khả năng duy nhất. Bạn có thể truyền một đối tượng tùy ý dưới dạng thông báo và phương thức

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
27 của nó sẽ được gọi khi hệ thống ghi nhật ký cần chuyển đổi nó thành biểu diễn chuỗi. Trên thực tế, nếu bạn muốn, bạn có thể tránh tính toán hoàn toàn một đại diện chuỗi - ví dụ:
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
88 phát ra một sự kiện bằng cách ngâm nó và gửi nó qua dây.

Tối ưu hóa¶

Định dạng của các đối số tin nhắn được hoãn lại cho đến khi không thể tránh được. Tuy nhiên, việc tính toán các đối số được chuyển cho phương thức ghi nhật ký cũng có thể tốn kém và bạn có thể muốn tránh làm điều đó nếu logger sẽ loại bỏ sự kiện của bạn. Để quyết định phải làm gì, bạn có thể gọi phương thức

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
29 có đối số cấp độ và trả về đúng nếu sự kiện sẽ được tạo bởi logger cho mức độ gọi đó. Bạn có thể viết mã như thế này:

Vì vậy, nếu ngưỡng của logger được đặt ở trên

# assuming loglevel is bound to the string value obtained from the
# command line argument. Convert to upper case to allow the user to
# specify --log=DEBUG or --log=debug
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
    raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level, ...)
1, các cuộc gọi đến
DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
31 và
DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
32 không bao giờ được thực hiện.

Trong một số trường hợp, bản thân

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
29 có thể đắt hơn bạn thích (ví dụ: đối với các trình ghi nhật ký được lồng sâu trong đó một mức rõ ràng chỉ được đặt cao trong hệ thống phân cấp logger). Trong những trường hợp như vậy (hoặc nếu bạn muốn tránh gọi một phương thức trong các vòng lặp chặt chẽ), bạn có thể lưu trữ kết quả của một cuộc gọi đến
DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
29 trong biến cục bộ hoặc phiên bản và sử dụng nó thay vì gọi phương thức mỗi lần. Giá trị được lưu trong bộ nhớ cache như vậy sẽ chỉ cần được tính toán lại khi cấu hình ghi nhật ký thay đổi một cách linh hoạt trong khi ứng dụng đang chạy (không phải là tất cả phổ biến).

Có những tối ưu hóa khác có thể được thực hiện cho các ứng dụng cụ thể cần kiểm soát chính xác hơn đối với thông tin ghi nhật ký được thu thập. Dưới đây, một danh sách những điều bạn có thể làm để tránh xử lý trong quá trình đăng nhập mà bạn không cần:

Những gì bạn không muốn thu thập

Làm thế nào để tránh thu thập nó

Thông tin về nơi các cuộc gọi được thực hiện từ.

Đặt

DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
35 thành
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
58. Điều này tránh gọi
DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
37, có thể giúp tăng tốc mã của bạn trong các môi trường như PYPY (có thể tăng tốc mã tăng tốc sử dụng
DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
37).

Thông tin luồng.