Tôi hiện đang làm việc với phiên bản 1.0.0 mô-đun pyftpdlib. Phiên bản mới này sẽ giới thiệu một số thay đổi không tương thích ngược trong rằng một số API nhất định sẽ không còn chấp nhận byte nhưng unicode. Trong khi tôi đang ở đó, như một phần của sự vi phạm này, tôi đã suy nghĩ về khả năng của để loại bỏ chức năng ghi nhật ký của mình, hiện đang sử dụng câu lệnh in và sử dụng mô-đun ghi nhật ký.Ưu điểm của việc ghi nhật ký so với in() + thực hành tốt nhất ghi nhật ký
Tính đến ngay bây giờ pyftpdlib đại biểu logging tới 3 chức năng:
def log(s):
"""Log messages intended for the end user."""
print s
def logline(s):
"""Log commands and responses passing through the command channel."""
print s
def logerror(s):
"""Log traceback outputs occurring in case of errors."""
print >> sys.stderr, s
Người dùng sẵn sàng để tùy chỉnh các bản ghi (ví dụ viết chúng vào một tập tin) được phải chỉ ghi đè lên những 3 chức năng như trong:
>>> from pyftpdlib import ftpserver
>>>
>>> def log2file(s):
... open('ftpd.log', 'a').write(s)
...
>>> ftpserver.log = ftpserver.logline = ftpserver.logerror = log2file
Bây giờ tôi tự hỏi: những lợi ích nào ngụ ý để loại bỏ phương pháp này và sử dụng mô-đun ghi nhật ký thay thế? Từ góc độ của nhà cung cấp mô-đun, tôi cho rằng chính xác như thế nào để hiển thị các chức năng ghi nhật ký trong mô-đun của tôi? Tôi phải làm điều này:
import logging
logger = logging.getLogger("pyftpdlib")
... và tiểu bang trong doc của tôi rằng "logger" là đối tượng mà là vụ sẽ được sử dụng trong trường hợp người dùng muốn tùy chỉnh cách cư xử bản ghi? Có hợp pháp để cố định đặt đầu ra định dạng được xác định trước như sau:
FORMAT = '[%(asctime)] %(message)s'
logging.basicConfig(format=FORMAT)
logger = logging.getLogger('pyftpdlib')
...?
Bạn có thể nghĩ đến mô-đun bên thứ ba mà tôi có thể lấy tín hiệu từ nơi chức năng ghi nhật ký được hiển thị và hợp nhất như một phần của API công khai không?
Xin cảm ơn trước.
Điều đó có nghĩa là không có đầu ra nào được tạo theo mặc định? Trong trường hợp đó tôi không hài lòng với nó. –
Điều này sẽ không tạo ra bất kỳ đầu ra nào theo mặc định. Ngoài ra, 'logging.NullHandler' chỉ có sẵn trong Python 2.7 (và> 3.2 tôi nghĩ), mà có thể là một vấn đề. Nếu bạn chỉ sử dụng 'logger = logging.getLogger ('pyftpdlib')', bạn sẽ nhận được các thông báo theo mặc định và bạn chỉ có thể trỏ người dùng của bạn đến tài liệu 'logging.setLevel' và' logging.setFormatter' để minh họa cách cấu hình đầu ra tin nhắn cho thư viện của bạn. Ngoài ra, bạn có thể sử dụng cấu hình tệp ['logging.config.fileConfig'] (http://docs.python.org/dev/library/logging.config.html#logging.config.fileConfig) để cho phép người dùng định cấu hình logger – Chris
Ngoài ra, để trả lời một trong các câu hỏi ban đầu của bạn, lợi ích của việc sử dụng ghi nhật ký thay vì các câu lệnh in được đề cập ngắn gọn trong [PEP 282] (http://www.python.org/dev/peps/pep-0282/): * Nếu một cơ chế đăng nhập duy nhất được ghi trong thư viện chuẩn, 1) ghi nhật ký có nhiều khả năng được thực hiện 'tốt', và 2) nhiều thư viện sẽ có thể được tích hợp vào các ứng dụng lớn hơn có thể ghi lại một cách hợp lý. * – Chris