Hướng dẫn python-json-logger - python-json-logger

Hướng dẫn python-json-logger - python-json-logger

Tổng quan

Thư 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ức

Xin 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 đặt

Pip:

pip install python-json-logger

Pypi:

https://pypi.python.org/pypi/python-json-logger

Manual:

python setup.py install

Cách sử dụng

Tí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ường

Trì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à message.

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ố extra={}.

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

python setup.py install
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

python setup.py install
1, hãy sử dụng lớp
python setup.py install
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 ra

Mẫ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

  • Wesley Tanaka-Các tệp nhật ký có cấu trúc trong Python bằng Python-Json-Logger

  • Lưu trữ