Hướng dẫn python-json-logger - python-json-logger
Show Tổng quanThư viện này được cung cấp để cho phép đăng nhập Python tiêu chuẩn để xuất dữ liệu nhật ký dưới dạng các đối tượng JSON. Với JSON, chúng tôi có thể làm cho nhật ký của chúng tôi dễ đọc hơn bằng máy và chúng tôi có thể ngừng viết trình phân tích cú pháp tùy chỉnh cho các bản ghi loại syslog. Tin tứcXin chào, tôi thấy gói này sống yên tĩnh và tôi xin lỗi vì đã bỏ qua nó quá lâu. Tôi sẽ tăng cường bảo trì gói này, vì vậy vui lòng cho phép tôi một tuần để lấy lại mọi thứ theo thứ tự (và rất có thể là một phiên bản nhỏ mới) và tôi sẽ đăng và cập nhật ở đây sau khi tôi bị cuốn vào. Cài đặtPip:
Pypi: https://pypi.python.org/pypi/python-json-logger Manual:
Cách sử dụngTích hợp với khung ghi nhật ký của PythonĐầu ra của JSON được cung cấp bởi JsonFormatter Formatter. Bạn có thể thêm định dạng tùy chỉnh như bên dưới: Xin lưu ý: Phiên bản 0.1.0 đã thay đổi cấu trúc nhập, vui lòng cập nhật thành ví dụ sau để nhập đúng import logging from pythonjsonlogger import jsonlogger logger = logging.getLogger() logHandler = logging.StreamHandler() formatter = jsonlogger.JsonFormatter() logHandler.setFormatter(formatter) logger.addHandler(logHandler) Tùy chỉnh các trườngTrình phân tích cú pháp FMT cũng có thể bị quá tải nếu bạn muốn có các trường yêu cầu khác với mặc định chỉ là Hai lời mời này tương đương: class CustomJsonFormatter(jsonlogger.JsonFormatter): def parse(self): return self._fmt.split(';') formatter = CustomJsonFormatter('one;two') # is equivalent to: formatter = jsonlogger.JsonFormatter('%(one)s %(two)s') Bạn cũng có thể thêm các trường bổ sung vào đầu ra JSON của mình bằng cách chỉ định một dict thay cho tin nhắn, cũng như bằng cách chỉ định một đối số Nội dung của các từ điển này sẽ được thêm vào ở cấp độ gốc của mục nhập và có thể ghi đè các trường cơ bản. Bạn cũng có thể sử dụng phương thức 0 để thêm hoặc thường bình thường hóa tập hợp các trường mặc định, nó được gọi cho mọi sự kiện nhật ký. Ví dụ: để thống nhất các trường mặc định với các trường được cung cấp bởi structlog, bạn có thể làm điều gì đó như sau:class CustomJsonFormatter(jsonlogger.JsonFormatter): def add_fields(self, log_record, record, message_dict): super(CustomJsonFormatter, self).add_fields(log_record, record, message_dict) if not log_record.get('timestamp'): # this doesn't use record.created, so it is slightly off now = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%fZ') log_record['timestamp'] = now if log_record.get('level'): log_record['level'] = log_record['level'].upper() else: log_record['level'] = record.levelname formatter = CustomJsonFormatter('%(timestamp)s %(level)s %(name)s %(message)s') Các mục được thêm vào bản ghi nhật ký sẽ được bao gồm trong mỗi thông báo nhật ký, bất kể định dạng yêu cầu gì. Thêm tuần tự hóa đối tượng tùy chỉnhĐể xử lý tùy chỉnh tuần tự hóa đối tượng, bạn có thể chỉ định Trình dịch đối tượng JSON mặc định hoặc cung cấp bộ mã hóa tùy chỉnh def json_translate(obj): if isinstance(obj, MyClass): return {"special": obj.special} formatter = jsonlogger.JsonFormatter(json_default=json_translate, json_encoder=json.JSONEncoder) logHandler.setFormatter(formatter) logger.info({"special": "value", "run": 12}) logger.info("classic message", extra={"special": "value", "run": 12}) Sử dụng tệp cấu hìnhĐể sử dụng mô -đun với tệp cấu hình bằng hàm 1, hãy sử dụng lớp 2. Đây là một tệp cấu hình mẫu.[loggers] keys = root,custom [logger_root] handlers = [logger_custom] level = INFO handlers = custom qualname = custom [handlers] keys = custom [handler_custom] class = StreamHandler level = INFO formatter = json args = (sys.stdout,) [formatters] keys = json [formatter_json] format = %(message)s class = pythonjsonlogger.jsonlogger.JsonFormatter Ví dụ đầu raMẫu JSON với một định dạng đầy đủ (về cơ bản là thông báo nhật ký từ bài kiểm tra đơn vị). Mỗi thông báo nhật ký sẽ xuất hiện trên 1 dòng giống như một logger điển hình. { "threadName": "MainThread", "name": "root", "thread": 140735202359648, "created": 1336281068.506248, "process": 41937, "processName": "MainProcess", "relativeCreated": 9.100914001464844, "module": "tests", "funcName": "testFormatKeys", "levelno": 20, "msecs": 506.24799728393555, "pathname": "tests/tests.py", "lineno": 60, "asctime": ["12-05-05 22:11:08,506248"], "message": "testing logging format", "filename": "tests.py", "levelname": "INFO", "special": "value", "run": 12 } Ví dụ bên ngoài
|