Tôi đang phát triển API REST thời gian thực bằng Python3+Chai/UWSGI. Tôi đã trải nghiệm độ trễ trong mã của mình, đôi khi 100 người, điều này quan trọng trong ứng dụng của tôi.
Sử dụng mô -đun logging, tôi đã cố gắng xác định các phần chậm của mã của mình, in thời gian các mã số đã mất bao lâu để chạy. Tôi biết đây là một cách cực kỳ kém để định hình mã, nhưng đôi khi nó có thể thực hiện công việc khá tốt.
Mặc dù tôi đã xác định được một số bộ phận chậm, tôi vẫn thiếu một cái gì đó - các phần riêng lẻ dường như mất 10 giây, nhưng rất thường xuyên chúng mất 100 cái MS nói chung. Sau một số thí nghiệm ngày càng điên rồ khiến tôi gần như hoàn toàn điên rồ, tôi đã đến như sau:
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
Mặc dù điều này có vẻ khó tin, có hai cuộc gọi logging.info() do đó, và vì một số lý do, có một khoảng cách gần 800 ms giữa chúng. Có ai có thể cho tôi biết những gì đang xảy ra? Đáng chú ý là nếu có nhiều cuộc gọi info(), độ trễ chỉ xuất hiện một lần trong toàn bộ phương thức API, thường xuyên nhất là ngay từ đầu (sau cuộc gọi đầu tiên). Giả thuyết duy nhất của tôi là độ trễ của đĩa, có một số công nhân (nhưng không quá nhiều!) Chạy đồng thời và tôi đang sử dụng đĩa quay, không có SSD. Nhưng tôi nghĩ rằng có bộ đệm và hệ điều hành sẽ làm không đồng bộ đĩa cho tôi. Tôi có sai trong các giả định của mình không? Tôi có nên tránh đăng nhập hoàn toàn để tránh độ trễ không?
CHỈNH SỬA
Dựa trên đề xuất của Vinay Sajip, tôi đã chuyển sang mã khởi tạo sau:
Có vẻ như nó hoạt động tốt (nếu tôi nhận xét queue_listener.start(), không có đầu ra), nhưng độ trễ tương tự vẫn xuất hiện. Tôi không thấy làm thế nào nó thậm chí có thể, cuộc gọi nên không chặn. Tôi cũng đặt gc.collect() vào cuối mỗi yêu cầu để đảm bảo vấn đề không phải do người thu gom rác - mà không có bất kỳ ảnh hưởng nào. Tôi cũng đã cố gắng tắt ghi nhật ký cho cả ngày. Các độ trễ biến mất, vì vậy tôi nghĩ rằng nguồn của chúng phải nằm trong mô -đun logging ...
Các trình xử lý hữu ích sau đây được cung cấp trong gói. Lưu ý rằng ba trong số các trình xử lý (
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
0,
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
1 và
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
2) thực sự được xác định trong chính mô -đun
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
3, nhưng đã được ghi lại ở đây cùng với các trình xử lý khác.
Streamhandler¶
Lớp
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
0, nằm trong gói lõi
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
3, gửi đầu ra đăng nhập vào các luồng như sys.stdout, sys.stderr hoặc bất kỳ đối tượng giống như tệp nào (hoặc, chính xác hơn là bất kỳ đối tượng nào hỗ trợ các phương thức
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
6 và
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
5 objects are also accepted
for the filename argument.
Thay đổi trong phiên bản 3.9: Tham số lỗi đã được thêm vào.The errors parameter was added.
gần()¶()¶
Đóng tệp.
phát ra (ghi) ¶(record)¶
Xuất bản ghi vào tệp.
Lưu ý rằng nếu tệp đã bị đóng do đóng cửa khi đăng nhập ở thoát và chế độ tệp là ‘W, thì bản ghi sẽ không được phát ra (xem BPO-42378).
Nullhandler¶
Mới trong phiên bản 3.1.
Lớp
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
2, nằm trong gói lõi
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
3, không thực hiện bất kỳ định dạng hoặc đầu ra nào. Nó thực chất là một trình xử lý ‘không có op để sử dụng bởi các nhà phát triển thư viện.
classLogging.nullHandler¶logging.NullHandler¶
Trả về một thể hiện mới của lớp
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
2.
phát ra (ghi) ¶(record)¶
Xuất bản ghi vào tệp.
Lưu ý rằng nếu tệp đã bị đóng do đóng cửa khi đăng nhập ở thoát và chế độ tệp là ‘W, thì bản ghi sẽ không được phát ra (xem BPO-42378).(record)¶
Xuất bản ghi vào tệp.
Lưu ý rằng nếu tệp đã bị đóng do đóng cửa khi đăng nhập ở thoát và chế độ tệp là ‘W, thì bản ghi sẽ không được phát ra (xem BPO-42378).()¶
Nullhandler¶
Mới trong phiên bản 3.1.Configuring Logging for a
Library for more information on how to use
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
2.
Lớp 2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
2, nằm trong gói lõi 2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
3, không thực hiện bất kỳ định dạng hoặc đầu ra nào. Nó thực chất là một trình xử lý ‘không có op để sử dụng bởi các nhà phát triển thư viện.
classLogging.nullHandler¶
Trả về một thể hiện mới của lớp
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
2.
Phương pháp này không làm gì cả.
Xử lý (ghi)logging.handlers.WatchedFileHandler(filename, mode='a', encoding=None, delay=False,
errors=None)¶
createlock () ¶
Thay đổi trong phiên bản 3.6: cũng như các giá trị chuỗi, các đối tượng
5 objects are also accepted for the filename argument.
Thay đổi trong phiên bản 3.9: Tham số lỗi đã được thêm vào.The errors parameter was added.
gần()¶()¶
Đóng tệp.
phát ra (ghi) ¶
phát ra (ghi) ¶(record)¶
Xuất bản ghi vào tệp.
Lưu ý rằng nếu tệp đã bị đóng do đóng cửa khi đăng nhập ở thoát và chế độ tệp là ‘W, thì bản ghi sẽ không được phát ra (xem BPO-42378).
Nullhandler¶
Mới trong phiên bản 3.1.logging.handlers.BaseRotatingHandler(filename, mode, encoding=None,
delay=False, errors=None)¶
Lớp
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
2, nằm trong gói lõi
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
3, không thực hiện bất kỳ định dạng hoặc đầu ra nào. Nó thực chất là một trình xử lý ‘không có op để sử dụng bởi các nhà phát triển thư viện.
classLogging.nullHandler¶¶
Trả về một thể hiện mới của lớp
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
2.
Ghi chú
Hàm Namer được gọi là khá nhiều lần trong quá trình tái đầu tư, vì vậy nó phải đơn giản và nhanh nhất có thể. Nó cũng sẽ trả về cùng một đầu ra mỗi lần cho một đầu vào đã cho, nếu không hành vi tái đầu tư có thể không hoạt động như mong đợi.
Nó cũng đáng chú ý rằng cần phải cẩn thận khi sử dụng tên tên để bảo tồn một số thuộc tính nhất định trong tên tệp được sử dụng trong quá trình xoay. Ví dụ: logging.info()3 dự kiến sẽ có một tập hợp các tệp nhật ký có tên chứa các số nguyên liên tiếp, do đó, xoay hoạt động như mong đợi và logging.info()4 xóa các tệp nhật ký cũ (dựa trên tham số info()0 được truyền cho trình khởi tạo của trình xử lý) bằng cách xác định các tệp cũ nhất . Để điều này xảy ra, tên tệp nên được sắp xếp bằng cách sử dụng phần ngày/thời gian của tên tệp và tên tên cần phải tôn trọng điều này. .
Mới trong phiên bản 3.3.
người quay vòng¶
Nếu thuộc tính này được đặt thành một người có thể gọi, phương thức info()3 được ủy quyền cho điều này có thể gọi được. Các tham số được truyền cho người được gọi là các tham số được chuyển đến info()3.
Mới trong phiên bản 3.3.
người quay vòng(default_name)¶
Nếu thuộc tính này được đặt thành một người có thể gọi, phương thức info()3 được ủy quyền cho điều này có thể gọi được. Các tham số được truyền cho người được gọi là các tham số được chuyển đến info()3.
rotation_filename (default_name) ¶
Sửa đổi tên tệp của tệp nhật ký khi xoay.
Điều này được cung cấp để một tên tệp tùy chỉnh có thể được cung cấp.
Việc triển khai mặc định gọi thuộc tính ‘Namer của người xử lý, nếu nó có thể gọi được, hãy chuyển tên mặc định cho nó. Nếu thuộc tính không thể gọi được (mặc định là
3), tên được trả về không thay đổi. – The default name for the log file.
Mới trong phiên bản 3.3.
người quay vòng(source, dest)¶
Nếu thuộc tính này được đặt thành một người có thể gọi, phương thức info()3 được ủy quyền cho điều này có thể gọi được. Các tham số được truyền cho người được gọi là các tham số được chuyển đến info()3.
rotation_filename (default_name) ¶
Điều này được cung cấp để một tên tệp tùy chỉnh có thể được cung cấp.
Việc triển khai mặc định gọi thuộc tính ‘Namer của người xử lý, nếu nó có thể gọi được, hãy chuyển tên mặc định cho nó. Nếu thuộc tính không thể gọi được (mặc định là
3), tên được trả về không thay đổi. – The source filename. This is normally the base filename, e.g. ‘test.log’.
Thông số – The destination filename. This is normally what the source is rotated to, e.g. ‘test.log.1’.
Mới trong phiên bản 3.3.
người quay vòng
Nếu thuộc tính này được đặt thành một người có thể gọi, phương thức info()3 được ủy quyền cho điều này có thể gọi được. Các tham số được truyền cho người được gọi là các tham số được chuyển đến info()3.
rotation_filename (default_name) ¶Using a rotator and namer to customize log rotation processing.
Sửa đổi tên tệp của tệp nhật ký khi xoay.
Điều này được cung cấp để một tên tệp tùy chỉnh có thể được cung cấp.
Việc triển khai mặc định gọi thuộc tính ‘Namer của người xử lý, nếu nó có thể gọi được, hãy chuyển tên mặc định cho nó. Nếu thuộc tính không thể gọi được (mặc định là
3), tên được trả về không thay đổi.logging.handlers.RotatingFileHandler(filename,
mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False,
errors=None)¶
5 objects are also accepted for the filename argument.
Khi xoay, xoay nhật ký hiện tại.The errors parameter was added.
Việc triển khai mặc định gọi thuộc tính ‘Rotator của người xử lý, nếu nó có thể gọi được, chuyển các đối số nguồn và định mệnh cho nó. Nếu thuộc tính không thể gọi được (mặc định là
Trả về một thể hiện mới của lớp logging.info()4. Tệp được chỉ định được mở và sử dụng làm luồng để ghi nhật ký. Khi quay, nó cũng đặt hậu tố tên tệp. Xoay xảy ra dựa trên sản phẩm của khi nào và khoảng thời gian.
Bạn có thể sử dụng khi nào để chỉ định loại khoảng thời gian. Danh sách các giá trị có thể dưới đây. Lưu ý rằng chúng không nhạy cảm với trường hợp.
Giá trị
Loại khoảng thời gian
Nếu/làm thế nào Attime được sử dụng
logging2
Giây
Làm ngơ
logging3
Phút
Làm ngơ
logging4
Phút
Làm ngơ
logging5
Phút
Làm ngơ
logging6
Phút
Giờ
logging7
Ngày
Giờ
Ngày
Ngày trong tuần (0 = Thứ Hai)
Được sử dụng để tính thời gian tái đầu tiên ban đầu
Lăn qua lúc nửa đêm, nếu không được chỉ định, khác tại thời điểm
Khi sử dụng vòng quay dựa trên tuần, chỉ định ‘W0, cho thứ Hai,‘ W1, cho thứ ba, v.v. cho đến ‘W6, cho Chủ nhật. Trong trường hợp này, giá trị được truyền cho khoảng thời gian được sử dụng.
Hệ thống sẽ lưu các tệp nhật ký cũ bằng cách nối các tiện ích mở rộng vào tên tệp. Các tiện ích mở rộng là dựa trên ngày và thời gian, sử dụng định dạng strftime logging8 hoặc một phần hàng đầu của chúng, tùy thuộc vào khoảng thời gian tái đầu tư.
Khi tính toán thời gian rollover tiếp theo lần đầu tiên (khi trình xử lý được tạo), thời gian sửa đổi cuối cùng của tệp nhật ký hiện có, hoặc thời gian hiện tại, được sử dụng để tính toán khi nào vòng quay tiếp theo sẽ xảy ra.
Nếu đối số UTC là đúng, thời gian trong UTC sẽ được sử dụng; Nếu không, thời gian địa phương được sử dụng.
Nếu BackupCount là khác nhau, tại hầu hết các tệp BackupCount sẽ được giữ và nếu nhiều hơn sẽ được tạo khi xảy ra rollover, thì tệp lâu đời nhất sẽ bị xóa. Logic xóa sử dụng khoảng thời gian để xác định tệp nào để xóa, do đó, việc thay đổi khoảng thời gian có thể khiến các tệp cũ nằm xung quanh.
Nếu độ trễ là đúng, thì việc mở tệp được hoãn lại cho đến khi cuộc gọi đầu tiên đến
3, thì đó phải là một ví dụ ____101, trong đó chỉ định thời gian trong ngày xảy ra, đối với các trường hợp Rollover được thiết lập để xảy ra vào lúc nửa đêm hoặc trên một ngày trong tuần cụ thể. Lưu ý rằng trong các trường hợp này, giá trị ATTIME được sử dụng một cách hiệu quả để tính toán rollover ban đầu và các bài phát triển tiếp theo sẽ được tính toán thông qua tính toán khoảng thông thường.atTime parameter was added.
Nếu lỗi được chỉ định, nó được sử dụng để xác định cách xử lý lỗi mã hóa.As well as string values,
5 objects are also accepted for the
filename argument.
Ghi chúThe errors parameter was added.
Tính toán thời gian tái đầu tư ban đầu được thực hiện khi trình xử lý được khởi tạo. Tính toán thời gian tái đầu tư tiếp theo chỉ được thực hiện khi xảy ra rollover, và rollover chỉ xảy ra khi phát ra đầu ra. Nếu điều này không được ghi nhớ, nó có thể dẫn đến một số nhầm lẫn. Ví dụ: nếu một khoảng thời gian của mỗi phút được đặt, điều đó không có nghĩa là bạn sẽ luôn thấy các tệp nhật ký có thời gian (trong tên tệp) được phân tách bằng một phút; Nếu, trong quá trình thực hiện ứng dụng, đầu ra ghi nhật ký được tạo thường xuyên hơn một lần một phút, thì bạn có thể mong đợi để thấy các tệp nhật ký với thời gian phân tách một phút. Mặt khác, nếu tin nhắn ghi nhật ký chỉ xuất ra mỗi năm phút một lần (giả sử), thì sẽ có những khoảng trống trong thời gian tệp tương ứng với các phút không có đầu ra (và do đó không có rollover) xảy ra.()¶
Thay đổi trong phiên bản 3.4: Tham số Attime đã được thêm vào.
Thay đổi trong phiên bản 3.6: cũng như các giá trị chuỗi, các đối tượng
Trả về một danh sách các tên tệp nên bị xóa như một phần của Rollover. Đây là những đường dẫn tuyệt đối của các tệp nhật ký sao lưu lâu đời nhất được viết bởi trình xử lý.
SOCKETHANDLER¶If
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
4. Nguyên nhân rất có thể là một kết nối bị mất. Đóng ổ cắm để chúng ta có thể thử lại trong sự kiện tiếp theo. workocket () ¶()¶
Đây là phương pháp nhà máy cho phép các lớp con xác định loại ổ cắm chính xác mà họ muốn. Việc triển khai mặc định tạo ra một ổ cắm TCP (
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
12).
makepickle (ghi) ¶(record)¶
Pickles Từ điển thuộc tính của bản ghi ở định dạng nhị phân với tiền tố chiều dài và trả về nó sẵn sàng để truyền qua ổ cắm. Các chi tiết của hoạt động này tương đương với:
Lưu ý rằng dưa chua aren hoàn toàn an toàn. Nếu bạn quan tâm đến bảo mật, bạn có thể muốn ghi đè phương thức này để thực hiện một cơ chế an toàn hơn. Ví dụ: bạn có thể ký vào dưa chua bằng HMAC và sau đó xác minh chúng ở đầu nhận, hoặc thay vào đó, bạn có thể vô hiệu hóa việc giải phóng các đối tượng toàn cầu ở đầu nhận.
Gửi (gói)(packet)¶
Gửi một gói chuỗi byte ngâm đến ổ cắm. Định dạng của chuỗi byte được gửi được mô tả trong tài liệu cho
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
13.
Chức năng này cho phép gửi một phần, có thể xảy ra khi mạng bận.
createSocket () ¶()¶
Cố gắng tạo một ổ cắm; Khi thất bại, sử dụng thuật toán ngược theo cấp số nhân. Khi thất bại ban đầu, người xử lý sẽ bỏ thông điệp mà nó đang cố gắng gửi. Khi các tin nhắn tiếp theo được xử lý theo cùng một trường hợp, nó sẽ không thử kết nối cho đến khi một thời gian trôi qua. Các tham số mặc định sao cho độ trễ ban đầu là một giây và nếu sau độ trễ đó, kết nối vẫn có thể được thực hiện, trình xử lý sẽ tăng gấp đôi độ trễ mỗi lần lên đến tối đa 30 giây.
Hành vi này được kiểm soát bởi các thuộc tính xử lý sau:
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
14 (độ trễ ban đầu, mặc định đến 1,0 giây).
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
15 (nhân, mặc định thành 2.0).
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
16 (độ trễ tối đa, mặc định đến 30,0 giây).
Điều này có nghĩa là nếu người nghe từ xa khởi động sau khi người xử lý đã được sử dụng, bạn có thể mất tin nhắn (vì trình xử lý won thậm chí còn thử kết nối cho đến khi độ trễ đã trôi qua, nhưng chỉ âm thầm bỏ tin nhắn trong thời gian trì hoãn).
Datagramhandler¶
Lớp
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
17, nằm trong mô -đun logging2, kế thừa từ
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
03 để hỗ trợ gửi tin nhắn ghi nhật ký qua ổ cắm UDP. classLogging.handlers.datagramhandler (máy chủ, cổng) ¶logging.handlers.DatagramHandler(host, port)¶
Trả về một thể hiện mới của lớp
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
17 nhằm liên lạc với một máy từ xa có địa chỉ được đưa ra bởi máy chủ và cổng.
Ghi chú
Vì UDP không phải là một giao thức phát trực tuyến, không có kết nối liên tục giữa một trường hợp của trình xử lý và máy chủ này. Vì lý do này, khi sử dụng ổ cắm mạng, việc tra cứu DNS có thể phải được thực hiện mỗi khi một sự kiện được ghi lại, có thể đưa một số độ trễ vào hệ thống. Nếu điều này ảnh hưởng đến bạn, bạn có thể tự tìm kiếm và khởi tạo trình xử lý này bằng địa chỉ IP tra cứu thay vì tên máy chủ.
Đã thay đổi trong phiên bản 3.4: Nếu
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
3, a Unix domain socket is created using the value in
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
08 - otherwise, a UDP socket is created.
phát ra () ¶()¶
Pickles Từ điển thuộc tính của bản ghi và ghi nó vào ổ cắm ở định dạng nhị phân. Nếu có lỗi với ổ cắm, hãy âm thầm bỏ gói. Để giải nén bản ghi ở đầu nhận vào
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
09, hãy sử dụng hàm
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
10.
workocket () ¶()¶
Phương pháp nhà máy của
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
03 ở đây được ghi đè để tạo ổ cắm UDP (
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
27). Gửi (các)(s)¶
Gửi một chuỗi byte ngâm đến một ổ cắm. Định dạng của chuỗi byte được gửi được mô tả trong tài liệu cho
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
28.
Sysloghandler¶
Lớp
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
29, nằm trong mô -đun logging2, hỗ trợ gửi tin nhắn ghi nhật ký đến một hệ thống unix từ xa hoặc cục bộ. classlogging.handlers.sysloghandler (address = ('localhost', syslog_udp_port), cơ sở = log_user, socktype = socket.sock_dgram) ¶logging.handlers.SysLogHandler(address=('localhost',SYSLOG_UDP_PORT), facility=LOG_USER,
socktype=socket.SOCK_DGRAM)¶
Trả về một thể hiện mới của lớp
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
29 nhằm liên lạc với một máy Unix từ xa có địa chỉ được đưa ra theo địa chỉ dưới dạng tuple
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
32. Nếu địa chỉ không được chỉ định,
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
33 được sử dụng. Địa chỉ được sử dụng để mở một ổ cắm. Một giải pháp thay thế để cung cấp một bộ
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
32 đang cung cấp một địa chỉ dưới dạng chuỗi, ví dụ: ‘/dev/log. Trong trường hợp này, một ổ cắm miền UNIX được sử dụng để gửi tin nhắn đến syslog. Nếu cơ sở không được chỉ định,
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
35 được sử dụng. Loại ổ cắm được mở phụ thuộc vào đối số socktype, mặc định là
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
27 và do đó mở ổ cắm UDP. Để mở một ổ cắm TCP (để sử dụng với các bản da syslog mới hơn như RSYSLOG), chỉ định giá trị của
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
12.
Lưu ý rằng nếu máy chủ của bạn không nghe trên cổng UDP 514,
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
29 có thể không hoạt động. Trong trường hợp đó, hãy kiểm tra địa chỉ bạn nên sử dụng cho ổ cắm miền - nó phụ thuộc vào hệ thống. Ví dụ: trên Linux, nó thường ‘/dev/log, nhưng trên OS/X, nó‘/var/run/syslog. Bạn cần phải kiểm tra nền tảng của mình và sử dụng địa chỉ thích hợp (bạn có thể cần thực hiện kiểm tra này vào thời gian chạy nếu ứng dụng của bạn cần chạy trên một số nền tảng). Trên Windows, bạn phải sử dụng tùy chọn UDP.
Ghi chú
Trên MacOS 12.x (Monterey), Apple đã thay đổi hành vi của trình nền syslog của họ - nó không còn lắng nghe trên ổ cắm miền. Do đó, bạn không thể mong đợi
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
29 hoạt động trên hệ thống này.
Xem GH-91070 để biết thêm thông tin.
Thay đổi trong phiên bản 3.2: Socktype đã được thêm vào.socktype was added.
gần()¶()¶
Đóng ổ cắm vào máy chủ từ xa.
createSocket () ¶()¶
Cố gắng tạo một ổ cắm và, nếu nó không phải là ổ cắm datagram, hãy kết nối nó với đầu kia. Phương pháp này được gọi trong quá trình khởi tạo xử lý, nhưng nó không được coi là lỗi nếu đầu kia không nghe vào thời điểm này - phương thức sẽ được gọi lại khi phát ra một sự kiện, nếu không được coi là một lỗi nếu đầu kia Chưa nghe - phương thức sẽ được gọi lại khi phát ra một sự kiện, nếu không có ổ cắm vào thời điểm đó.
Mới trong phiên bản 3.11.
phát ra (ghi) ¶(record)¶
Bản ghi được định dạng, và sau đó được gửi đến máy chủ Syslog. Nếu thông tin ngoại lệ có mặt, nó không được gửi đến máy chủ.
Đã thay đổi trong phiên bản 3.2.1: (xem: BPO -12168.) Trong các phiên bản trước, tin nhắn được gửi đến các bản daemon syslog luôn bị chấm dứt với một byte nul Trong đặc điểm kỹ thuật có liên quan (RFC 5424). Các phiên bản gần đây hơn của những chiếc daemon này không mong đợi byte nul nhưng loại bỏ nó nếu nó ở đó, và thậm chí các daemon gần đây hơn (tuân thủ chặt chẽ hơn RFC 5424) vượt qua Byte nul trên như một phần của thông điệp.(See:
bpo-12168.) In earlier versions, the message sent to the syslog daemons was always terminated with a NUL byte, because early versions of these daemons expected a NUL terminated message - even though it’s not in the relevant specification (RFC 5424). More recent versions of these daemons
don’t expect the NUL byte but strip it off if it’s there, and even more recent daemons (which adhere more closely to RFC 5424) pass the NUL byte on as part of the message.
Để cho phép xử lý dễ dàng hơn các thông điệp syslog khi đối mặt với tất cả các hành vi daemon khác nhau này, việc nối thêm byte nul đã được cấu hình, thông qua việc sử dụng thuộc tính cấp độ lớp,
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
40. Điều này mặc định là
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
41 (bảo tồn hành vi hiện có) nhưng có thể được đặt thành
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
42 trên một phiên bản
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
29 để trường hợp đó không nối thêm NUL Terminator.
Đã thay đổi trong phiên bản 3.3: (xem: BPO-12419.) Trong các phiên bản trước, không có cơ sở nào cho một tiền tố nhận dạng của người nhận dạng hoặc thẻ thẻ để xác định nguồn tin nhắn. Điều này hiện có thể được chỉ định bằng cách sử dụng thuộc tính cấp lớp, mặc định thành
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
44 để bảo tồn hành vi hiện có, nhưng có thể được ghi đè lên một thể hiện
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
29 để trường hợp đó đưa nhận dạng cho mọi tin nhắn được xử lý. Lưu ý rằng nhận dạng được cung cấp phải là văn bản, không phải byte và được chuẩn bị cho tin nhắn chính xác như là.(See: bpo-12419.) In earlier versions, there was no facility for an “ident” or “tag” prefix to identify the source of the message. This can now be specified using a class-level attribute, defaulting to
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
44 to preserve existing behaviour, but which can be overridden on a
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
29 instance
in order for that instance to prepend the ident to every message handled. Note that the provided ident must be text, not bytes, and is prepended to the message exactly as is. Mã hóa (cơ sở, ưu tiên)(facility,
priority)¶
Mã hóa cơ sở và ưu tiên thành một số nguyên. Bạn có thể vượt qua chuỗi hoặc số nguyên - nếu chuỗi được truyền, từ điển ánh xạ nội bộ được sử dụng để chuyển đổi chúng thành số nguyên.
Các giá trị
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
46 tượng trưng được xác định trong
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
29 và phản ánh các giá trị được xác định trong tệp tiêu đề
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
48.
Ưu tiên
Tên (Chuỗi)
Giá trị tượng trưng
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
49
LOG_ALERT
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
50 hoặc
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
51
LOG_CRIT
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
52
LOG_DEBUG
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
53 hoặc
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
54
LOG_EMERG
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
55 hoặc
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
56
LOG_ERR
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
57
LOG_INFO
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
58
LOG_NOTICE
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
59 hoặc
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
60
LOG_WARNING
Cơ sở
Tên (Chuỗi)
Giá trị tượng trưng
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
61
LOG_AUTH
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
62
LOG_AUTHPRIV
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
63
LOG_CRON
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
64
LOG_DAEMON
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
65
LOG_FTP
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
66
LOG_KERN
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
67
LOG_LPR
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
68
LOG_MAIL
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
69
LOG_NEWS
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
70
LOG_SYSLOG
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
71
LOG_USER
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
72
LOG_UUCP
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
73
LOG_LOCAL0
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
74
LOG_LOCAL1
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
75
LOG_LOCAL2
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
76
LOG_LOCAL3
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
77
LOG_LOCAL4
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
78
LOG_LOCAL5
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
79
LOG_LOCAL6
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
80
LOG_LOCAL7
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
50 hoặc
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
51(levelname)¶
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
53 hoặc
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
54
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
55 hoặc 2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
56
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
59 hoặc
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
60 Cơ sởlogging.handlers.NTEventLogHandler(appname, dllname=None,
logtype='Application')¶
SAPIRIORITY (LALENAME) ¶
gần()¶()¶
Tại thời điểm này, bạn có thể xóa tên ứng dụng khỏi sổ đăng ký dưới dạng nguồn của các mục nhật ký sự kiện. Tuy nhiên, nếu bạn làm điều này, bạn sẽ không thể xem các sự kiện như bạn dự định trong trình xem nhật ký sự kiện - nó cần có thể truy cập sổ đăng ký để lấy tên .dll. Phiên bản hiện tại không làm điều này.
phát ra (ghi) ¶(record)¶
Xác định ID tin nhắn, danh mục sự kiện và loại sự kiện, sau đó ghi nhật ký tin nhắn vào nhật ký sự kiện NT.
GetEventC Category (Record) ¶(record)¶
Trả về danh mục sự kiện cho hồ sơ. Ghi đè này nếu bạn muốn chỉ định các danh mục của riêng bạn. Phiên bản này trả về 0.
getEventType (hồ sơ) ¶(record)¶
Trả về loại sự kiện cho bản ghi. Ghi đè này nếu bạn muốn chỉ định các loại của riêng bạn. Phiên bản này thực hiện một ánh xạ bằng cách sử dụng thuộc tính Type của Handler, được thiết lập trong
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
94 thành một từ điển chứa các ánh xạ cho
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
81,
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
82,
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
83,
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
84 và
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
85. Nếu bạn đang sử dụng các cấp độ của riêng mình, bạn sẽ cần phải ghi đè phương thức này hoặc đặt một từ điển phù hợp vào thuộc tính Type Type của Handler.
getmessageid (hồ sơ) ¶(record)¶
Trả về ID tin nhắn cho bản ghi. Nếu bạn đang sử dụng tin nhắn của riêng mình, bạn có thể làm điều này bằng cách truyền MSG cho logger là ID thay vì chuỗi định dạng. Sau đó, ở đây, bạn có thể sử dụng Tra cứu từ điển để lấy ID tin nhắn. Phiên bản này trả về 1, đó là ID tin nhắn cơ sở trong
01, nằm trong mô -đun logging2, hỗ trợ gửi tin nhắn đăng nhập đến địa chỉ email qua SMTP.
classLogging.handlers.smtphandler (mailhost, fromaddr, toaddrs, chủ đề, thông tin xác thực = none, an toàn = không, thời gian chờ = 1.0) ¶logging.handlers.SMTPHandler(mailhost, fromaddr, toaddrs, subject, credentials=None,
secure=None, timeout=1.0)¶
01. Trường hợp được khởi tạo với từ và đến địa chỉ và dòng chủ đề của email. Các con cóc nên là một danh sách các chuỗi. Để chỉ định cổng SMTP không chuẩn, hãy sử dụng định dạng tuple (máy chủ, cổng) cho đối số MailHost. Nếu bạn sử dụng một chuỗi, cổng SMTP tiêu chuẩn được sử dụng. Nếu máy chủ SMTP của bạn yêu cầu xác thực, bạn có thể chỉ định một bộ điều khiển (tên người dùng, mật khẩu) cho đối số thông tin đăng nhập.
Để chỉ định việc sử dụng giao thức an toàn (TLS), hãy chuyển theo một đối số an toàn. Điều này sẽ chỉ được sử dụng khi thông tin xác thực được cung cấp. Bộ tuple phải là một tuple trống hoặc một tuple một giá trị đơn với tên của một keyfile hoặc một tuple 2 giá trị với tên của tệp keyfile và chứng chỉ. (Tuple này được chuyển sang phương pháp
Thời gian chờ có thể được chỉ định để liên lạc với máy chủ SMTP bằng đối số thời gian chờ.
Mới trong phiên bản 3.3: Đối số thời gian chờ đã được thêm vào.The timeout argument was added.
phát ra (ghi) ¶(record)¶
Xác định ID tin nhắn, danh mục sự kiện và loại sự kiện, sau đó ghi nhật ký tin nhắn vào nhật ký sự kiện NT.
GetEventC Category (Record) ¶(record)¶
Trả về danh mục sự kiện cho hồ sơ. Ghi đè này nếu bạn muốn chỉ định các danh mục của riêng bạn. Phiên bản này trả về 0.
getEventType (hồ sơ) ¶
Trả về loại sự kiện cho bản ghi. Ghi đè này nếu bạn muốn chỉ định các loại của riêng bạn. Phiên bản này thực hiện một ánh xạ bằng cách sử dụng thuộc tính Type của Handler, được thiết lập trong
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
94 thành một từ điển chứa các ánh xạ cho
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
81,
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
82,
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
83,
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
84 và
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
85. Nếu bạn đang sử dụng các cấp độ của riêng mình, bạn sẽ cần phải ghi đè phương thức này hoặc đặt một từ điển phù hợp vào thuộc tính Type Type của Handler.
getmessageid (hồ sơ) ¶
Trả về ID tin nhắn cho bản ghi. Nếu bạn đang sử dụng tin nhắn của riêng mình, bạn có thể làm điều này bằng cách truyền MSG cho logger là ID thay vì chuỗi định dạng. Sau đó, ở đây, bạn có thể sử dụng Tra cứu từ điển để lấy ID tin nhắn. Phiên bản này trả về 1, đó là ID tin nhắn cơ sở trong
01, nằm trong mô -đun logging2, hỗ trợ gửi tin nhắn đăng nhập đến địa chỉ email qua SMTP.
classLogging.handlers.smtphandler (mailhost, fromaddr, toaddrs, chủ đề, thông tin xác thực = none, an toàn = không, thời gian chờ = 1.0) ¶()¶
01. Trường hợp được khởi tạo với từ và đến địa chỉ và dòng chủ đề của email. Các con cóc nên là một danh sách các chuỗi. Để chỉ định cổng SMTP không chuẩn, hãy sử dụng định dạng tuple (máy chủ, cổng) cho đối số MailHost. Nếu bạn sử dụng một chuỗi, cổng SMTP tiêu chuẩn được sử dụng. Nếu máy chủ SMTP của bạn yêu cầu xác thực, bạn có thể chỉ định một bộ điều khiển (tên người dùng, mật khẩu) cho đối số thông tin đăng nhập.
Để chỉ định việc sử dụng giao thức an toàn (TLS), hãy chuyển theo một đối số an toàn. Điều này sẽ chỉ được sử dụng khi thông tin xác thực được cung cấp. Bộ tuple phải là một tuple trống hoặc một tuple một giá trị đơn với tên của một keyfile hoặc một tuple 2 giá trị với tên của tệp keyfile và chứng chỉ. (Tuple này được chuyển sang phương pháp
Thời gian chờ có thể được chỉ định để liên lạc với máy chủ SMTP bằng đối số thời gian chờ.
Mới trong phiên bản 3.3: Đối số thời gian chờ đã được thêm vào.logging.handlers.MemoryHandler(capacity, flushLevel=ERROR, target=None,
flushOnClose=True)¶
Định dạng hồ sơ và gửi nó đến các địa chỉ được chỉ định.
Đã thay đổi trong phiên bản 3.6: Tham số FlushOnClose đã được thêm vào.The flushOnClose parameter was added.
gần()¶()¶
Gọi
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
05, Flushing có nghĩa là chỉ gửi các bản ghi được đệm đến mục tiêu, nếu có. Bộ đệm cũng được xóa khi điều này xảy ra. Ghi đè nếu bạn muốn hành vi khác nhau. mục tiêu (mục tiêu) ¶(target)¶
Đặt trình xử lý mục tiêu cho người xử lý này.
Shouldflush (ghi) ¶(record)¶
Kiểm tra bộ đệm đầy đủ hoặc một bản ghi ở Flushlevel hoặc cao hơn.
25. classLogging.handlers.httphandler (host, url, phương thức = 'get', an toàn = false, thông tin xác thực = none, bối cảnh = không)logging.handlers.HTTPHandler(host, url, method='GET', secure=False, credentials=None,
context=None)¶
29 để định cấu hình cài đặt SSL được sử dụng cho kết nối HTTPS. Nếu thông tin đăng nhập được chỉ định, nó phải là 2-tuple bao gồm userID và mật khẩu, sẽ được đặt trong tiêu đề HTTP ‘ủy quyền sử dụng xác thực cơ bản. Nếu bạn chỉ định thông tin đăng nhập, bạn cũng nên chỉ định Secure = true để người dùng và mật khẩu của bạn không được truyền trong ClearText trên dây.
Thay đổi trong phiên bản 3.5: Tham số ngữ cảnh đã được thêm vào.The context parameter was added.
34 có thể được sử dụng để cho phép người xử lý thực hiện công việc của họ trên một luồng riêng biệt với bản ghi. Điều này rất quan trọng trong các ứng dụng web và các ứng dụng dịch vụ khác trong đó các chủ đề phục vụ khách hàng cần trả lời càng nhanh càng tốt, trong khi bất kỳ hoạt động chậm có khả năng nào (chẳng hạn như gửi email qua
34. Trường hợp được khởi tạo với hàng đợi để gửi tin nhắn đến. Hàng đợi có thể là bất kỳ đối tượng giống như hàng đợi; Nó được sử dụng AS-IS bằng phương pháp
34 có thể được sử dụng để cho phép người xử lý thực hiện công việc của họ trên một luồng riêng biệt với bản ghi. Điều này rất quan trọng trong các ứng dụng web và các ứng dụng dịch vụ khác trong đó các chủ đề phục vụ khách hàng cần trả lời càng nhanh càng tốt, trong khi bất kỳ hoạt động chậm có khả năng nào (chẳng hạn như gửi email qua
34. Trường hợp được khởi tạo với hàng đợi để gửi tin nhắn đến. Hàng đợi có thể là bất kỳ đối tượng giống như hàng đợi; Nó được sử dụng AS-IS bằng phương pháp
38 có thể được sử dụng để cho phép người xử lý thực hiện công việc của họ trên một luồng riêng biệt với bản ghi nhật ký. Điều này rất quan trọng trong các ứng dụng web và các ứng dụng dịch vụ khác trong đó các chủ đề phục vụ khách hàng cần trả lời càng nhanh càng tốt, trong khi bất kỳ hoạt động chậm có khả năng nào (chẳng hạn như gửi email qua
01) được thực hiện trên một luồng riêng biệt. classLogging.handlers.queuelistener (hàng đợi, *người xử lý, tôn trọng_handler_level = false) ¶logging.handlers.QueueListener(queue, *handlers,
respect_handler_level=False)¶
38. Ví dụ được khởi tạo với hàng đợi để gửi tin nhắn đến và một danh sách các trình xử lý sẽ xử lý các mục được đặt trên hàng đợi. Hàng đợi có thể là bất kỳ đối tượng giống như hàng đợi; Nó đã chuyển qua phương pháp
81, cần biết cách nhận tin nhắn từ nó. Hàng đợi không bắt buộc phải có API theo dõi tác vụ (mặc dù nó được sử dụng nếu có), điều đó có nghĩa là bạn có thể sử dụng các phiên bản
2014-07-16 23:21:23,531 [140554568353] Foo
2014-07-16 23:21:24,312 [140554568353] Bar
41, cấp độ xử lý được tôn trọng (so với mức độ cho tin nhắn) khi quyết định có truyền tin nhắn cho trình xử lý đó hay không; Mặt khác, hành vi này như trong các phiên bản Python trước đây - để luôn chuyển từng tin nhắn cho mỗi người xử lý.
86. Bạn có thể muốn ghi đè phương thức này nếu bạn muốn sử dụng thời gian chờ hoặc làm việc với việc triển khai hàng đợi tùy chỉnh. Chuẩn bị (ghi)(record)¶
Chuẩn bị một kỷ lục để xử lý.
Việc thực hiện này chỉ trả về hồ sơ thông qua. Bạn có thể muốn ghi đè phương thức này nếu bạn cần thực hiện bất kỳ sự sắp xếp hoặc thao tác tùy chỉnh nào của hồ sơ trước khi chuyển nó cho người xử lý.
Xử lý (ghi)(record)¶
Xử lý một bản ghi.
Điều này chỉ lặp qua các trình xử lý cung cấp cho họ hồ sơ để xử lý. Đối tượng thực tế được chuyển cho các trình xử lý là được trả về từ
Điều này bắt đầu một luồng nền để theo dõi hàng đợi cho logrecords để xử lý.
dừng lại()¶()¶
Ngừng người nghe.
Điều này yêu cầu chủ đề chấm dứt, và sau đó chờ nó làm như vậy. Lưu ý rằng nếu bạn không gọi này trước khi ứng dụng của bạn thoát ra, có thể có một số hồ sơ vẫn còn lại trên hàng đợi, trong đó đã giành được xử lý.
enqueue_sentinel () ¶()¶
Viết một Sentinel cho Hàng đợi để nói với người nghe từ bỏ. Việc triển khai này sử dụng