Modulenotfounderror: không có mô-đun nào có tên pythonjsonlogger

def setup_logging(home, dài dòng). """Định cấu hình ghi nhật ký cho tổ ong. ghi nhật ký """. ghi nhật ký setLoggerClass(MyLogger). cấu hình. dictConfig({ "phiên bản". 1, "tắt_hiện_logger". Sai, "bộ định dạng". { "bảng điều khiển". { "định dạng". "%(tên cấp độ)-8s [%(asctime)s %(tên)s] %(tên tệp)s. %(lineno)s %(funcName)s. %(tin nhắn)s", }, "json". { "()". jsonlogger. JsonFormatter, "định dạng". "%(levelname)s %(asctime)s %(name)s %(filename)s %(lineno)s %(funcName)s %(message)s", }, }, "handlers". { "mặc định". { "mức độ". "DEBUG" nếu dài dòng khác "INFO", "class". "đăng nhập. StreamHandler", "bộ định dạng". "bảng điều khiển", }, "tệp". { "mức độ". "GỠ LỖI", "lớp". "đăng nhập. người xử lý. WatchedFileHandler", "tên tập tin". hệ điều hành. đường dẫn. tham gia (nhà, DEBUG_LOG_FILE), "bộ định dạng". "json", }, }, "logger". {"". { "người xử lý". ["mặc định", "tệp"], "mức độ". "DEBUG", "lan truyền". ĐÚNG VẬY, }, } })
6. Mô-đun hiện đã được cài đặt trong công việc trình bao Python của bạn. Để xác nhận, hãy kiểm tra nhóm Amazon CloudWatch Logs để biết các tác vụ Python shell (/aws-glue/python-jobs/output). Đây là một ví dụ về một đầu ra thành công

Thư viện này được cung cấp để cho phép ghi nhật ký python tiêu chuẩn để xuất dữ liệu nhật ký dưới dạng đối tượng json. Với JSON, chúng tôi có thể làm cho nhật ký của mình 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 nhật ký hệ thống

Xin chào, tôi thấy gói này vẫn còn sống 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 để sắp xếp 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 khi tôi bắt kịp

Pip

pip install python-json-logger

Pypi

https. //pypi. con trăn. org/pypi/python-json-logger

Thủ công

python setup.py install

Tích hợp với khung ghi nhật ký của Python

Đầu ra Json được cung cấp bởi trình định dạng nhật ký JsonFormatter. Bạn có thể thêm trình đị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 ví dụ sau để nhập chính xác

    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ị ghi đè nếu bạn muốn có các trường bắt buộc khác với mặc định chỉ là

python setup.py install
0

Hai lời gọi này là 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 lệnh thay cho thông báo, cũng như bằng cách chỉ định một đối số

python setup.py install
1

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 đè lên các trường cơ bản

Bạn cũng có thể sử dụng phương pháp

python setup.py install
0 để thêm vào hoặc thường chuẩn 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ư thế này

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 đưa vào mọi thông báo tường trình, bất kể định dạng yêu cầu là 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 tin 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

JSON mẫu với trình đị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 trình ghi thông thường