Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

This activity has been put on hold due to the reprioritization of resources. We have documented the steps we have taken so far here, for those that may want to continue this work.

Python POC Notes


This place is to document the development of the Python POC for Security Logging.

...

Technical Approach

  • Most fields from Jakarta Best Practice Proposal for Standardized Logging Fields page can be configured using Python logging standard library
    • Some fields are already defined logging — Logging facility for Python — Python 3.10.7 documentation)
    • The rest is to create a proper configuration that could be reused by all projects (the question is if that should be done by some package or kept in one place in wiki or something).
  • Configuration could be a part of the ONAP Python base image and developers can only load it from a file stored on the container, which is explained there (Logging HOWTO — Python 3.10.7 documentation).
  • That would be the easiest part but… we are going to have some custom fields on record so looks like we have to define our own logging (Logging facility for Python — Python 3.10.7 documentation) LogRecord class.
  • So probably the best way is to create a package with that and install it on all base containers, so developers could import it. 

...

...


pylog (onaplogging module)

- https://git.onap.org/logging-analytics/tree/pylog/onaplogging

Interesting Functions

There is an interesting function in https://github.com/onap/dcaegen2-services/blob/master/components/pm-subscription-handler/pmsh_service/mod/__init__.py lines 39 - 50

def mdc_handler(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        request_id = str(uuid.uuid1())
        invocation_id = str(uuid.uuid1())
        MDC.put('ServiceName', getenv('HOSTNAME'))
        MDC.put('RequestID', request_id)
        MDC.put('InvocationID', invocation_id)

        kwargs['request_id'] = request_id
        kwargs['invocation_id'] = invocation_id
        return func(*args, **kwargs)