Sử dụng bộ nhớ ghi nhật ký Python
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ý ( và ) thực sự được xác định trong chính mô-đun, nhưng đã được ghi lại ở đây cùng với các trình xử lý khác Show
StreamHandlerLớp, nằm trong gói lõi, gửi đầu ra ghi nhật ký tới các luồng như sys. thiết bị xuất chuẩn, hệ thống. stderr hoặc bất kỳ đối tượng giống tệp nào (hay chính xác hơn là bất kỳ đối tượng nào hỗ trợ các phương thức Trả về một thể hiện mới của lớp. Nếu luồng được chỉ định, phiên bản sẽ sử dụng luồng đó để ghi nhật ký đầu ra; . stderr sẽ được sử dụng phát ra(bản ghi)Nếu một trình định dạng được chỉ định, nó sẽ được sử dụng để định dạng bản ghi. Bản ghi sau đó được ghi vào luồng theo sau bởi. Nếu có thông tin ngoại lệ, nó sẽ được định dạng bằng cách sử dụng và thêm vào luồng xả()Xóa luồng bằng cách gọi phương thức của nó. Lưu ý rằng phương thức Đặt luồng của phiên bản thành giá trị đã chỉ định, nếu nó khác. Luồng cũ bị xóa trước khi luồng mới được đặt Thông sốluồng - Luồng mà trình xử lý nên sử dụng trả lạiluồng cũ, nếu luồng đã bị thay đổi hoặc Không có nếu không Mới trong phiên bản 3. 7 Kẻ hủy diệtChuỗi được sử dụng làm dấu kết thúc khi ghi bản ghi được định dạng vào luồng. Giá trị mặc định là Nếu bạn không muốn kết thúc dòng mới, bạn có thể đặt thuộc tính Trong các phiên bản trước, bộ kết thúc được mã hóa cứng thành Mới trong phiên bản 3. 2 Trình xử lý tệpLớp, nằm trong gói lõi, gửi đầu ra ghi nhật ký tới một tệp đĩa. Nó kế thừa chức năng đầu ra từ lớp ghi nhật ký. Trình xử lý tệp(tên tệp , chế độ='a', encoding=None, delay=False, errors=None)Trả về một thể hiện mới của lớp. Tệp được chỉ định được mở và được sử dụng làm luồng để ghi nhật ký. Nếu chế độ không được chỉ định, Đã thay đổi trong phiên bản 3. 6. Cũng như các giá trị chuỗi, các đối tượng cũng được chấp nhận cho đối số tên tệp. Đã thay đổi trong phiên bản 3. 9. Thông số lỗi đã được thêm vào. đóng()Đóng tệp phát ra(bản ghi)Xuất bản ghi ra tệp Lưu ý rằng nếu tệp bị đóng do tắt nhật ký khi thoát và chế độ tệp là 'w', thì bản ghi sẽ không được phát ra (xem bpo-42378) NullHandlerMới trong phiên bản 3. 1 Lớp, nằm trong gói lõi, 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ý 'no-op' để các nhà phát triển thư viện sử dụng lớp ghi nhật ký. NullHandlerTrả về một thể hiện mới của lớp phát ra(bản ghi)Phương pháp này không làm gì cả xử lý(bản ghi)Phương pháp này không làm gì cả createLock()Phương thức này trả về Xem để biết thêm thông tin về cách sử dụng Trình xử lý tệp đã xemLớp, nằm trong mô-đun, là một Thay đổi tệp có thể xảy ra do sử dụng các chương trình như newsyslog và logrotate thực hiện xoay tệp nhật ký. Trình xử lý này, dành cho sử dụng trong Unix/Linux, xem tệp để xem nó có thay đổi kể từ lần phát cuối cùng không. (Một tập tin được coi là đã thay đổi nếu thiết bị hoặc inode của nó đã thay đổi. ) Nếu tệp đã thay đổi, luồng tệp cũ bị đóng và tệp được mở để nhận luồng mới Trình xử lý này không thích hợp để sử dụng trong Windows, bởi vì trong Windows các tệp nhật ký mở không thể được di chuyển hoặc đổi tên - việc ghi nhật ký sẽ mở các tệp bằng các khóa độc quyền - và do đó không cần một trình xử lý như vậy. Hơn nữa, ST_INO không được hỗ trợ trong Windows; lớp ghi nhật ký. người xử lý. WatchedFileHandler(tên tệp , chế độ='a', encoding=None, delay=False, errors=None)Trả về một thể hiện mới của lớp. Tệp được chỉ định được mở và được sử dụng làm luồng để ghi nhật ký. Nếu chế độ không được chỉ định, Đã thay đổi trong phiên bản 3. 6. Cũng như các giá trị chuỗi, các đối tượng cũng được chấp nhận cho đối số tên tệp. Đã thay đổi trong phiên bản 3. 9. Thông số lỗi đã được thêm vào. reopenIfNeeded()Kiểm tra xem tập tin đã thay đổi chưa. Nếu có, luồng hiện tại sẽ bị xóa và đóng và tệp được mở lại, thường là tiền thân để xuất bản ghi vào tệp Mới trong phiên bản 3. 6 phát ra(bản ghi)Xuất bản ghi vào tệp, nhưng trước tiên hãy gọi để mở lại tệp nếu nó đã thay đổi BaseRotatingHandlerLớp, nằm trong mô-đun, là lớp cơ sở cho các trình xử lý tệp quay vòng và. Bạn không cần khởi tạo lớp này, nhưng nó có các thuộc tính và phương thức mà bạn có thể cần ghi đè lớp ghi nhật ký. người xử lý. BaseRotatingHandler(tên tệp , chế độ, encoding=None, delay=False, errors=None)Các thông số như đối với Nếu thuộc tính này được đặt thành có thể gọi được, phương thức sẽ ủy quyền cho thuộc tính có thể gọi này. Các tham số được truyền cho có thể gọi được là các tham số được truyền cho Ghi chú Chức năng đặt tên được gọi khá nhiều lần trong quá trình tái đầu tư, do đó, chức năng này 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 nhất định, nếu không, hành vi tái đầu tư có thể không hoạt động như mong đợi Cũng cần lưu ý rằng cần cẩn thận khi sử dụng trình đặt tên để bảo toàn các thuộc tính nhất định trong tên tệp được sử dụng trong quá trình xoay. Ví dụ: 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, để xoay vòng hoạt động như mong đợi và xóa các tệp nhật ký cũ (dựa trên tham số Mới trong phiên bản 3. 3 máy quayNếu thuộc tính này được đặt thành có thể gọi được, phương thức sẽ ủy quyền cho thuộc tính có thể gọi này. Các tham số được truyền cho có thể gọi được là các tham số được truyền cho Mới trong phiên bản 3. 3 tên_tệp xoay(tên_tệp_xoay)Sửa đổi tên tệp của tệp nhật ký khi xoay Điều này được cung cấp để có thể cung cấp tên tệp tùy chỉnh Việc triển khai mặc định gọi thuộc tính 'namer' của trình 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à default_name – Tên mặc định cho tệp nhật ký Mới trong phiên bản 3. 3 xoay(nguồn , điểm đến)Khi xoay, xoay log hiện tại Việc triển khai mặc định gọi thuộc tính 'rotator' của trình xử lý, nếu nó có thể gọi được, chuyển các đối số nguồn và đích cho nó. Nếu thuộc tính không thể gọi được (mặc định là
Mới trong phiên bản 3. 3 Lý do các thuộc tính tồn tại là để giúp bạn tiết kiệm phải phân lớp - bạn có thể sử dụng các lệnh gọi tương tự cho các trường hợp của và. Nếu trình gọi tên hoặc công cụ quay vòng có thể gọi được đưa ra một ngoại lệ, điều này sẽ được xử lý giống như bất kỳ ngoại lệ nào khác trong cuộc gọi Nếu bạn cần thực hiện nhiều thay đổi quan trọng hơn đối với quá trình xoay vòng, bạn có thể ghi đè các phương thức Ví dụ, xem Xoay FileHandlerLớp, nằm trong mô-đun, hỗ trợ xoay các tệp nhật ký đĩa lớp ghi nhật ký. người xử lý. RotatingFileHandler(tên tệp , chế độ='a', maxBytes=0, backupCount=0, encoding=None, delay=False, errors=None)Trả về một thể hiện mới của lớp. Tệp được chỉ định được mở và được sử dụng làm luồng để ghi nhật ký. Nếu chế độ không được chỉ định, Bạn có thể sử dụng các giá trị maxBytes và backupCount để cho phép tệp cuộn qua ở kích thước định trước. Khi sắp vượt quá kích thước, tệp sẽ bị đóng và một tệp mới sẽ được mở âm thầm để xuất ra. Rollover xảy ra bất cứ khi nào tệp nhật ký hiện tại có độ dài gần maxBytes; . Khi backupCount khác không, hệ thống sẽ lưu các tệp nhật ký cũ bằng cách nối thêm các phần mở rộng ‘. 1', '. 2’ v.v. , đến tên tệp. Ví dụ: với backupCount là 5 và tên tệp cơ sở là Đã thay đổi trong phiên bản 3. 6. Cũng như các giá trị chuỗi, các đối tượng cũng được chấp nhận cho đối số tên tệp. Đã thay đổi trong phiên bản 3. 9. Thông số lỗi đã được thêm vào. Rollover, như mô tả ở trên phát ra(bản ghi)Xuất bản ghi vào tệp, phục vụ cho di chuột qua như được mô tả trước đây TimedRotatingFileHandlerLớp, nằm trong mô-đun, hỗ trợ xoay các tệp nhật ký đĩa theo các khoảng thời gian nhất định lớp ghi nhật ký. người xử lý. TimedRotatingFileHandler(tên tệp , khi nào='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False, atTime=None, errors=None)Trả về một thể hiện mới của lớp. Tệp được chỉ định được mở và được sử dụng làm luồng để ghi nhật ký. Khi xoay nó cũng đặt hậu tố tên tệp. Xoay vòng xảy ra dựa trên sản phẩm của thời điểm và khoảng thời gian Bạn có thể sử dụng thời điểm để chỉ định loại khoảng thời gian. Danh sách các giá trị có thể ở bên dưới. Lưu ý rằng chúng không phân biệt chữ hoa chữ thường Giá trị Loại khoảng thời gian Nếu/như thế nào atTime được sử dụng
giây Làm ngơ
Phút Làm ngơ
Giờ Làm ngơ
ngày Làm ngơ
Ngày trong tuần (0=thứ hai) Được sử dụng để tính toán thời gian tái đầu tư ban đầu
Chuyển qua lúc nửa đêm, nếu atTime không được chỉ định, nếu không thì tại thời điểm atTime Được sử dụng để tính toán thời gian tái đầu tư ban đầu Khi sử dụng xoay vòng theo ngày trong tuần, hãy 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 không được sử dụng Hệ thống sẽ lưu các tệp nhật ký cũ bằng cách thêm phần mở rộng vào tên tệp. Các tiện ích mở rộng dựa trên ngày và giờ, sử dụng định dạng strftime Khi tính toán thời gian tái đầu tư 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 sẽ được sử dụng để tính toán khi nào sẽ xảy ra lần luân chuyển tiếp theo Nếu đối số utc là đúng, thời gian trong UTC sẽ được sử dụng; Nếu backupCount khác 0, thì tối đa các tệp backupCount sẽ được giữ lại và nếu nhiều tệp khác được tạo khi di chuột qua, thì tệp cũ nhất sẽ bị xóa. Logic xóa sử dụng khoảng thời gian để xác định tệp nào cần xóa, vì vậy việc thay đổi khoảng thời gian có thể khiến các tệp cũ nằm lung tung Nếu độ trễ là đúng, thì việc mở tệp bị hoãn lại cho đến khi lệnh gọi đầu tiên đến Nếu atTime không phải là Nếu lỗi được chỉ định, nó được sử dụng để xác định cách xử lý lỗi mã hóa Ghi chú Việc 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 tái đầu tư xảy ra và tái đầu tư 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 khoảng thời gian "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ách nhau một phút; . Mặt khác, nếu các thông báo ghi nhật ký chỉ được xuất năm phút một lần (giả sử), thì sẽ có khoảng trống trong thời gian tệp tương ứng với số phút không có đầu ra (và do đó không xảy ra chuyển đổi) Đã 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 cũng được chấp nhận cho đối số tên tệp. Đã thay đổi trong phiên bản 3. 9. Thông số lỗi đã được thêm vào. doRollover()Rollover, như mô tả ở trên phát ra(bản ghi)Xuất bản ghi vào tệp, phục vụ cho việc tái đầu tư như mô tả ở trên getFilesToDelete()Trả về danh sách tên tệp sẽ 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 cũ nhất được ghi bởi trình xử lý Trình xử lý ổ cắmLớp, nằm trong mô-đun, gửi đầu ra ghi nhật ký tới ổ cắm mạng. Lớp cơ sở sử dụng ổ cắm TCP lớp ghi nhật ký. người xử lý. SocketHandler(máy chủ , cổng)Trả về một phiên bản mới của lớp dự định giao tiếp với một máy từ xa có địa chỉ được cung cấp bởi máy chủ và cổng Đã thay đổi trong phiên bản 3. 4. Nếu Đóng ổ cắm phát ra()Chọn 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 bỏ gói âm thầm. Nếu kết nối trước đó bị mất, hãy thiết lập lại kết nối. Để giải nén bản ghi ở đầu nhận thành một , hãy sử dụng hàm xử lý Lỗi()Xử lý lỗi xảy ra trong quá trình. Nguyên nhân rất có thể là do mất kết nối. Đóng ổ cắm để chúng tôi có thể thử lại vào sự kiện tiếp theo makeSocket()Đây là một phương thức xuất xưởng cho phép các lớp con xác định loại ổ cắm chính xác mà chúng muốn. Việc triển khai mặc định tạo một ổ cắm TCP () makePickle(bản ghi)Chọn từ điển thuộc tính của bản ghi ở định dạng nhị phân với tiền tố độ dài và trả lại bản ghi ở trạng thái sẵn sàng để truyền qua ổ cắm. Các chi tiết của hoạt động này là tương đương với data = pickle.dumps(record_attr_dict, 1) datalen = struct.pack('>L', len(data)) return datalen + data Lưu ý rằng dưa chua không hoàn toàn an toàn. Nếu bạn lo ngại về bảo mật, bạn có thể muốn ghi đè phương thức này để triển khai cơ chế an toàn hơn. Ví dụ: bạn có thể ký các dưa chua bằng HMAC và sau đó xác minh chúng ở đầu nhận hoặc cách khác, bạn có thể vô hiệu hóa tính năng bỏ chọn các đối tượng chung ở đầu nhận gửi(gói)Gửi gói chuỗi byte được chọn đến ổ cắm. Định dạng của chuỗi byte đã gửi được mô tả trong tài liệu về Chức năng này cho phép gửi một phần, điều này có thể xảy ra khi mạng bận createSocket()Cố gắng tạo một ổ cắm; . Khi gặp lỗi ban đầu, trình xử lý sẽ bỏ thông báo mà nó đang cố gửi. Khi các tin nhắn tiếp theo được xử lý bởi cùng một phiên bản, 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ễ đó mà kết nối vẫn không thể thực hiện được, trình xử lý sẽ nhân đôi độ trễ mỗi lần lên tối đa là 30 giây Hành vi này được kiểm soát bởi các thuộc tính trình xử lý sau
Điều này có nghĩa là nếu trình nghe từ xa khởi động sau khi trình xử lý đã được sử dụng, bạn có thể bị mất tin nhắn (vì trình xử lý thậm chí sẽ không thử kết nối cho đến khi hết thời gian trễ mà chỉ âm thầm gửi tin nhắn trong thời gian trễ) DatagramHandlerLớp, nằm trong mô-đun, kế thừa từ để hỗ trợ gửi thông báo ghi nhật ký qua ổ cắm UDP lớp ghi nhật ký. người xử lý. DatagramHandler(máy chủ , cổng)Trả về một phiên bản mới của lớp dự định giao tiếp với một máy từ xa có địa chỉ được cung cấp bởi máy chủ và cổng Ghi chú Vì UDP không phải là giao thức phát trực tuyến nên không có kết nối liên tục giữa phiên bản của trình xử lý này và máy chủ lưu trữ. Vì lý do này, khi sử dụng ổ cắm mạng, có thể phải thực hiện tra cứu DNS mỗi khi một sự kiện được ghi lại, điều này có thể gây ra một số độ trễ cho hệ thống. Nếu điều này ảnh hưởng đến bạn, bạn có thể tự tra cứu và khởi tạo trình xử lý này bằng cách sử dụ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 Chọn 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 bỏ gói âm thầm. Để giải nén bản ghi ở đầu nhận thành một , hãy sử dụng hàm makeSocket()Phương thức xuất xưởng của ở đây được ghi đè để tạo ổ cắm UDP () gửi(s)Gửi một chuỗi byte được chọn đến một ổ cắm. Định dạng của chuỗi byte đã gửi được mô tả trong tài liệu về SysLogHandlerLớp, nằm trong mô-đun, hỗ trợ gửi thông báo ghi nhật ký đến nhật ký hệ thống Unix từ xa hoặc cục bộ lớp ghi nhật ký. người xử lý. SysLogHandler(địa chỉ=( . SOCK_DGRAM SYSLOG_UDP_PORT), facility=LOG_USER, socktype=socket.SOCK_DGRAM)Trả về một phiên bản mới của lớp dự định giao tiếp với một máy Unix từ xa có địa chỉ được cung cấp bởi địa chỉ dưới dạng bộ dữ liệu Lưu ý rằng nếu máy chủ của bạn không nghe trên cổng UDP 514, có thể không hoạt động. Trong trường hợp đó, hãy kiểm tra xem bạn nên sử dụng địa chỉ nào cho ổ cắm tên miền - địa chỉ này phụ thuộc vào hệ thống. Ví dụ: trên Linux, nó thường là '/dev/log' nhưng trên OS/X, nó là '/var/run/syslog'. Bạn sẽ cần 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 việc kiểm tra này trong thời gian chạy nếu ứng dụng của bạn cần chạy trên nhiều 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 nhật ký hệ thống của họ - nó không còn lắng nghe trên ổ cắm tên miền nữa. Do đó, bạn không thể mong đợi làm việc 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. loại vớ đã được thêm vào. đóng()Đóng ổ cắm cho máy chủ từ xa createSocket()Cố gắng tạo một ổ cắm và nếu đó không phải là ổ cắm datagram, hãy kết nối nó với đầu kia. Phương thức này được gọi trong quá trình khởi tạo trình 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 nhưng nó không được coi là lỗi nếu đầu kia Mới trong phiên bản 3. 11 phát ra(bản ghi)Bản ghi được định dạng và sau đó được gửi đến máy chủ nhật ký hệ thống. Nếu có thông tin ngoại lệ, nó sẽ 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, thông báo được gửi đến trình nền nhật ký hệ thống luôn được kết thúc bằng byte NUL, vì các phiên bản đầu tiên của các trình tiện ích này mong đợi một thông báo kết thúc NUL - ngay cả khi nó không có trong thông số kỹ thuật có liên quan (RFC 5424). Các phiên bản gần đây hơn của các trình tiện ích này không mong đợi byte NUL nhưng sẽ loại bỏ nó nếu nó ở đó và thậm chí các trình tiện ích gần đây hơn (tuân thủ chặt chẽ hơn với RFC 5424) chuyển byte NUL vào như một phần của thông báo. Để cho phép xử lý dễ dàng hơn các thông báo nhật ký hệ thống 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 thực hiện có thể định cấu hình, thông qua việc sử dụng thuộc tính cấp lớp, Đã 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 tiền tố “nhận dạng” hoặc “thẻ” để xác định nguồn gốc của thông báo. Đ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 là Mã hóa cơ sở và mức độ ưu tiên thành một số nguyên. Bạn có thể truyền vào chuỗi hoặc số nguyên - nếu chuỗi được truyền, từ điển ánh xạ bên trong được sử dụng để chuyển đổi chúng thành số nguyên Các giá trị ưu tiên Tên (chuỗi) giá trị tượng trưng
LOG_ALERT
LOG_CRIT
LOG_DEBUG
LOG_EMERG
LOG_ERR
LOG_INFO
LOG_THÔNG BÁO
LOG_WARNING Cơ sở Tên (chuỗi) giá trị tượng trưng
LOG_AUTH
LOG_AUTHPRIV
LOG_CRON
LOG_DAEMON
ĐĂNG_FTP
LOG_KERN
LOG_LPR
LOG_MAIL
LOG_TIN TỨC
LOG_SYSLOG
LOG_USER
LOG_UUCP
LOG_LOCAL0
LOG_LOCAL1
LOG_LOCAL2
LOG_LOCAL3
LOG_LOCAL4
LOG_LOCAL5
LOG_LOCAL6
LOG_LOCAL7 mapPriority(tên cấp độ)Ánh xạ tên mức ghi nhật ký thành tên ưu tiên nhật ký hệ thống. Bạn có thể cần phải ghi đè điều này nếu bạn đang sử dụng các mức tùy chỉnh hoặc nếu thuật toán mặc định không phù hợp với nhu cầu của bạn. Thuật toán mặc định ánh xạ NTEventLogHandlerLớp, nằm trong mô-đun, hỗ trợ gửi thông báo ghi nhật ký tới nhật ký sự kiện Windows NT, Windows 2000 hoặc Windows XP cục bộ. Trước khi bạn có thể sử dụng nó, bạn cần cài đặt tiện ích mở rộng Win32 của Mark Hammond cho Python lớp ghi nhật ký. người xử lý. NTEventLogHandler(tên ứng dụng , dllname=None, logtype='Application')Trả về một thể hiện mới của lớp. Tên ứng dụng được sử dụng để xác định tên ứng dụng khi nó xuất hiện trong nhật ký sự kiện. Một mục đăng ký thích hợp được tạo bằng tên này. Tên dll nên cung cấp tên đường dẫn đủ điều kiện của một. dll hoặc. exe chứa các định nghĩa thông báo để giữ trong nhật ký (nếu không được chỉ định, thì sử dụng 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 vào 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(bản ghi)Xác định ID thông báo, danh mục sự kiện và loại sự kiện, sau đó ghi thông báo vào nhật ký sự kiện NT getEventCategory(bản ghi)Trả về danh mục sự kiện cho bản ghi. Ghi đè điều này nếu bạn muốn chỉ định danh mục của riêng mình. Phiên bản này trả về 0 getEventType(bản ghi)Trả về loại sự kiện cho bản ghi. Ghi đè lên điều 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 ánh xạ bằng cách sử dụng thuộc tính typemap của trình xử lý, thuộc tính này được thiết lập trong 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ể thực hiện việc này bằng cách chuyển tin nhắn đến bộ ghi dưới dạng ID thay vì chuỗi định dạng. Sau đó, tại đâ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 Trình xử lý SMTPLớp, nằm trong mô-đun, hỗ trợ gửi thông báo ghi nhật ký đến địa chỉ email qua SMTP lớp ghi nhật ký. người xử lý. SMTPHandler(mailhost , fromaddr . 0, toaddrs, subject, credentials=None, secure=None, timeout=1.0)Trả về một thể hiện mới của lớp. Phiên bản được khởi tạo với địa chỉ từ và đến và dòng chủ đề của email. Toaddrs phải 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 bộ (máy chủ, cổng) cho đối số máy chủ lưu trữ. Nếu bạn sử dụng một chuỗi, cổng SMTP tiêu chuẩn sẽ đượ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ộ (tên người dùng, mật khẩu) cho đối số thông tin xác thực Để chỉ định việc sử dụng giao thức bảo mật (TLS), hãy chuyển một bộ vào đối số bảo mật. Điều này sẽ chỉ được sử dụng khi thông tin đăng nhập xác thực được cung cấp. Bộ dữ liệu phải là bộ trống hoặc bộ giá trị đơn có tên của tệp khóa hoặc bộ giá trị 2 có tên của tệp khóa và tệp chứng chỉ. (Bộ dữ liệu này được truyền cho phương thức. ) Thời gian chờ có thể được chỉ định để liên lạc với máy chủ SMTP bằng cách sử dụng đối số thời gian chờ Mới trong phiên bản 3. 3. Đã thêm đối số thời gian chờ. phát ra(bản ghi)Định dạng bản ghi và gửi nó đến người nhận được chỉ định getSubject(bản ghi)Nếu bạn muốn chỉ định dòng chủ đề phụ thuộc vào bản ghi, hãy ghi đè phương thức này Trình xử lý bộ nhớLớp, nằm trong mô-đun, hỗ trợ đệm các bản ghi nhật ký trong bộ nhớ, định kỳ xóa chúng tới trình xử lý đích. Xả xảy ra bất cứ khi nào bộ đệm đầy hoặc khi nhìn thấy một sự kiện có mức độ nghiêm trọng nhất định trở lên là một lớp con của lớp tổng quát hơn, là một lớp trừu tượng. Bộ đệm này ghi lại các bản ghi trong bộ nhớ. Bất cứ khi nào mỗi bản ghi được thêm vào bộ đệm, một kiểm tra được thực hiện bằng cách gọi Khởi tạo trình xử lý với bộ đệm có dung lượng đã chỉ định. Ở đây, dung lượng có nghĩa là số lượng bản ghi nhật ký được lưu vào bộ đệm phát ra(bản ghi)Nối bản ghi vào bộ đệm. Nếu trả về true, gọi để xử lý bộ đệm xả()Bạn có thể ghi đè điều này để thực hiện hành vi xả tùy chỉnh. Phiên bản này chỉ làm trống bộ đệm nênFlush(bản ghi)Trả lại Trả về một thể hiện mới của lớp. Phiên bản được khởi tạo với kích thước dung lượng bộ đệm (số lượng bản ghi được lưu vào bộ đệm). Nếu flushLevel không được chỉ định, Đã thay đổi trong phiên bản 3. 6. Tham số flushOnClose đã được thêm vào. đóng()Gọi , đặt mục tiêu thành Đối với a , flushing có nghĩa là chỉ gửi các bản ghi được đệm tới đích, nếu có. Bộ đệm cũng bị xóa khi điều này xảy ra. Ghi đè nếu bạn muốn hành vi khác setTarget(mục tiêu)Đặt trình xử lý đích cho trình xử lý này nênFlush(bản ghi)Kiểm tra bộ đệm đầy hoặc bản ghi ở flushLevel hoặc cao hơn Trình xử lý HTTPLớp, nằm trong mô-đun, hỗ trợ gửi thông báo ghi nhật ký tới máy chủ web, sử dụng ngữ nghĩa Trả về một thể hiện mới của lớp. Máy chủ có thể ở dạng Đã thay đổi trong phiên bản 3. 5. Tham số bối cảnh đã được thêm vào. mapLogRecord(bản ghi)Cung cấp một từ điển, dựa trên Gửi bản ghi đến máy chủ web dưới dạng từ điển được mã hóa URL. Phương thức được sử dụng để chuyển đổi bản ghi thành từ điển được gửi Ghi chú Vì việc chuẩn bị một bản ghi để gửi nó đến một máy chủ web không giống như một thao tác định dạng chung, nên việc sử dụng để chỉ định một cho một không có tác dụng. Thay vì gọi , trình xử lý này gọi và sau đó mã hóa từ điển ở dạng phù hợp để gửi đến máy chủ web Trình xử lý hàng đợiMới trong phiên bản 3. 2 Lớp, nằm trong mô-đun, hỗ trợ gửi thông báo ghi nhật ký đến một hàng đợi, chẳng hạn như những thông báo được triển khai trong mô-đun hoặc Cùng với lớp, có thể được sử dụng để cho phép các trình 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 luồng thực hiện ghi nhật ký. Điều này rất quan trọng trong các ứng dụng web và cả các ứng dụng dịch vụ khác, nơi các luồng phục vụ máy khách cần phản hồi nhanh nhất có thể, trong khi mọi hoạt động có khả năng chậm (chẳng hạn như gửi email qua ) được thực hiện trên một luồng riêng biệt lớp ghi nhật ký. người xử lý. QueueHandler(hàng đợi)Trả về một thể hiện mới của lớp. Thể hiện đượ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 hàng đợi nào; . Hàng đợi không bắt buộc phải có API theo dõi tác vụ, nghĩa là bạn có thể sử dụng các phiên bản cho hàng đợi Ghi chú Nếu bạn đang sử dụng, bạn nên tránh sử dụng và thay vào đó hãy sử dụng phát ra(bản ghi)Enqueues kết quả của việc chuẩn bị LogRecord. Nếu một ngoại lệ xảy ra (e. g. vì một hàng đợi giới hạn đã đầy), phương thức này được gọi để xử lý lỗi. Điều này có thể dẫn đến việc bản ghi bị hủy một cách lặng lẽ (nếu Lập hồ sơ xếp hàng. Đối tượng được phương thức này trả về được xếp vào hàng đợi Việc triển khai cơ sở định dạng bản ghi để hợp nhất thông báo, đối số, ngoại lệ và thông tin ngăn xếp, nếu có. Nó cũng xóa các mục không thể chọn khỏi bản ghi tại chỗ. Cụ thể, nó ghi đè các thuộc tính Bạn có thể muốn ghi đè phương thức này nếu muốn chuyển đổi bản ghi thành chuỗi dict hoặc JSON hoặc gửi bản sao đã sửa đổi của bản ghi trong khi vẫn giữ nguyên bản gốc Ghi chú Việc triển khai cơ sở định dạng thư với các đối số, đặt các thuộc tính Liệt kê bản ghi trên hàng đợi bằng cách sử dụng QueueListenerMới trong phiên bản 3. 2 Lớp, nằm trong mô-đun, hỗ trợ nhận thông báo ghi nhật ký từ hàng đợi, chẳng hạn như các thông báo được triển khai trong mô-đun hoặc. Các tin nhắn được nhận từ một hàng đợi trong một luồng nội bộ và được chuyển, trên cùng một luồng, tới một hoặc nhiều trình xử lý để xử lý. Mặc dù bản thân nó không phải là trình xử lý, nhưng nó được ghi lại ở đây vì nó hoạt động song song với Cùng với lớp, có thể được sử dụng để cho phép các trình 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 luồng thực hiện ghi nhật ký. Điều này rất quan trọng trong các ứng dụng web và cả các ứng dụng dịch vụ khác, nơi các luồng phục vụ máy khách cần phản hồi nhanh nhất có thể, trong khi mọi hoạt động có khả năng chậm (chẳng hạn như gửi email qua ) được thực hiện trên một luồng riêng biệt lớp ghi nhật ký. người xử lý. QueueListener(hàng đợi , *handlers, respect_handler_level=False)Trả về một thể hiện mới của lớp. Phiên bản được khởi tạo với hàng đợi để gửi tin nhắn đến và 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 hàng đợi nào; . 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ó), nghĩa là bạn có thể sử dụng các phiên bản cho hàng đợi Ghi chú Nếu bạn đang sử dụng, bạn nên tránh sử dụng và thay vào đó hãy sử dụng Nếu Đã thay đổi trong phiên bản 3. 5. Đối số Xếp hàng một bản ghi và trả lại nó, chặn tùy chọn Việc triển khai cơ sở sử dụng Lập biên bản xử lý Việc triển khai này chỉ trả về bản ghi đã chuyển vào. 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ỳ thao tác sắp xếp hoặc thao tác tùy chỉnh nào đối với bản ghi trước khi chuyển nó tới trình xử lý xử lý(bản ghi)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ọ bản ghi để xử lý. Đối tượng thực tế được chuyển đến trình xử lý là đối tượng được trả về từ bắt đầu()Bắt đầu người nghe Điều này khởi động một luồng nền để theo dõi hàng đợi để LogRecords xử lý dừng()Dừng người nghe Điều này yêu cầu luồng kết thúc và sau đó đợi nó làm như vậy. Lưu ý rằng nếu bạn không gọi điều này trước khi ứng dụng của bạn thoát, có thể có một số bản ghi vẫn còn trên hàng đợi và sẽ không được xử lý enqueue_sentinel()Viết một lính canh vào hàng đợi để báo cho người nghe thoát. Việc triển khai này sử dụng Làm cách nào để ghi nhật ký sử dụng bộ nhớ trong Python?Tất cả những gì bạn phải làm là thêm chức năng trang trí và chức năng process_memory trong mã của bạn và điều này sẽ cung cấp cho bạn bộ nhớ được tiêu thụ bởi .
Tại sao Python chiếm quá nhiều bộ nhớ?Những số đó có thể dễ dàng khớp với số nguyên 64 bit, vì vậy người ta hy vọng Python sẽ lưu trữ một triệu số nguyên đó trong không quá ~8MB. một triệu đối tượng 8 byte. Trên thực tế, Python sử dụng nhiều hơn 35 MB RAM để lưu trữ những con số này. Tại sao? . Because Python integers are objects, and objects have a lot of memory overhead.
Python có quản lý bộ nhớ không?Quản lý bộ nhớ trong Python liên quan đến một đống riêng chứa tất cả các đối tượng Python và cấu trúc dữ liệu . Việc quản lý vùng riêng tư này được đảm bảo nội bộ bởi trình quản lý bộ nhớ Python.
Làm cách nào để sử dụng CPU bằng Python?Sử dụng mã dành riêng cho nền tảng, chẳng hạn như sử dụng hệ điều hành. popen("ps") hoặc tương tự cho các hệ thống *nix và MEMORYSTATUS trong ctypes. gió thổi. kernel32 (xem công thức này trên ActiveState) cho nền tảng Windows. . kỉ niệm |