import json import logging from collections import OrderedDict from typing import Any, Dict # noqa: F401 from uaclient import util class RedactionFilter(logging.Filter): """A logging filter to redact confidential info""" def filter(self, record: logging.LogRecord): record.msg = util.redact_sensitive_logs(str(record.msg)) return True class JsonArrayFormatter(logging.Formatter): """Json Array Formatter for our logging mechanism Custom made for Pro logging needs """ default_time_format = "%Y-%m-%dT%H:%M:%S" default_msec_format = "%s.%03d" required_fields = ( "asctime", "levelname", "name", "funcName", "lineno", "message", ) def format(self, record: logging.LogRecord) -> str: record.message = record.getMessage() record.asctime = self.formatTime(record) extra_message_dict = {} # type: Dict[str, Any] if record.exc_info: extra_message_dict["exc_info"] = self.formatException( record.exc_info ) if not extra_message_dict.get("exc_info") and record.exc_text: extra_message_dict["exc_info"] = record.exc_text if record.stack_info: extra_message_dict["stack_info"] = self.formatStack( record.stack_info ) extra = record.__dict__.get("extra") if extra and isinstance(extra, dict): extra_message_dict.update(extra) # is ordered to maintain order of fields in log output local_log_record = OrderedDict() # type: Dict[str, Any] # update the required fields in the order stated for field in self.required_fields: value = record.__dict__.get(field) local_log_record[field] = value local_log_record["extra"] = extra_message_dict return json.dumps(list(local_log_record.values()))
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
__pycache__ | Folder | 0755 |
|
|
api | Folder | 0755 |
|
|
clouds | Folder | 0755 |
|
|
daemon | Folder | 0755 |
|
|
entitlements | Folder | 0755 |
|
|
files | Folder | 0755 |
|
|
jobs | Folder | 0755 |
|
|
__init__.py | File | 0 B | 0644 |
|
actions.py | File | 8.19 KB | 0644 |
|
apt.py | File | 25.74 KB | 0644 |
|
apt_news.py | File | 6.33 KB | 0644 |
|
cli.py | File | 64.22 KB | 0644 |
|
config.py | File | 24.5 KB | 0644 |
|
contract.py | File | 27.47 KB | 0644 |
|
contract_data_types.py | File | 9.38 KB | 0644 |
|
data_types.py | File | 10.3 KB | 0644 |
|
defaults.py | File | 2.46 KB | 0644 |
|
event_logger.py | File | 7.75 KB | 0644 |
|
exceptions.py | File | 13.56 KB | 0644 |
|
gpg.py | File | 813 B | 0644 |
|
livepatch.py | File | 11.03 KB | 0644 |
|
lock.py | File | 3.58 KB | 0644 |
|
log.py | File | 1.89 KB | 0644 |
|
messages.py | File | 38.47 KB | 0644 |
|
pip.py | File | 756 B | 0644 |
|
security.py | File | 48.75 KB | 0644 |
|
security_status.py | File | 24.19 KB | 0644 |
|
serviceclient.py | File | 6.22 KB | 0644 |
|
snap.py | File | 4.06 KB | 0644 |
|
status.py | File | 25.73 KB | 0644 |
|
system.py | File | 17.09 KB | 0644 |
|
types.py | File | 308 B | 0644 |
|
util.py | File | 20.3 KB | 0644 |
|
version.py | File | 2.81 KB | 0644 |
|
yaml.py | File | 642 B | 0644 |
|