Restore app-agnostic-logging-parameters spec
bp/app-agnostic-logging-parameters spec Change-Id: I7a25e00f1fb3ad6f043527502f1fa1b9385b0d3e
This commit is contained in:
parent
612232fd72
commit
35ebb89c60
181
specs/kilo/app-agnostic-logging-parameters.rst
Normal file
181
specs/kilo/app-agnostic-logging-parameters.rst
Normal file
@ -0,0 +1,181 @@
|
||||
===================================================================
|
||||
Provide application-agnostic logging parameters in format strings
|
||||
===================================================================
|
||||
|
||||
https://blueprints.launchpad.net/oslo.log/+spec/app-agnostic-logging-parameters
|
||||
|
||||
We still have some nova-specific names in the default logging format
|
||||
string, and we want to eliminate those to make oslo.log more generally
|
||||
useful across projects.
|
||||
|
||||
Problem description
|
||||
===================
|
||||
|
||||
The default ``logging_context_format_string`` and
|
||||
``logging_default_format_string`` option values include
|
||||
``%(instance)s``, which is not useful in all projects. We should do
|
||||
something like what we did with "user_identity" and provide a generic
|
||||
name, which the projects can fill in with their desired value.
|
||||
|
||||
Proposed change
|
||||
===============
|
||||
|
||||
Make :class:`RequestContext` from :mod:`openstack.common.context` into
|
||||
an abstract base class for other applications to use for their own
|
||||
application-specific request contexts. In the new base class, define
|
||||
some abstract properties with generic names like ``user_identity``,
|
||||
``resource_id``, the chain of request ids, etc. that the subclass
|
||||
can override.
|
||||
|
||||
Change the default for the logging format strings to refer to these
|
||||
generic names.
|
||||
|
||||
Add a new method to the base class to return values useful for
|
||||
logging. We cannot use the existing :meth:`to_dict` because we expect
|
||||
the logging values to contain generated properties not used for things
|
||||
like reconstructing the context when it passes through RPC calls.
|
||||
|
||||
::
|
||||
|
||||
def get_logging_values(self):
|
||||
"""Return a dict containing values for logging using this context.
|
||||
"""
|
||||
values = self.to_dict()
|
||||
values.update({
|
||||
'user_identity': self.user_identity,
|
||||
'resource_id': self.resource_id,
|
||||
'request_chain': ' '.join(self.request_ids),
|
||||
})
|
||||
return values
|
||||
|
||||
Remove the other functions in the :mod:`context` module for creating
|
||||
and testing contexts. The applications all have their own version of
|
||||
these functions and the versions provided in :mod:`context` are not
|
||||
useful when subclasses of :class:`RequestContext` are used.
|
||||
|
||||
Update the logging code to use :meth:`get_logging_values` instead of
|
||||
:meth:`to_dict`.
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
|
||||
We had previously talked about removing this module entirely, but
|
||||
given changes to logging to make the user identity parameters log
|
||||
consistently across projects, I think making it a useful base class is
|
||||
a better approach.
|
||||
|
||||
Impact on Existing APIs
|
||||
-----------------------
|
||||
|
||||
Existing context classes will be updated to be subclasses of the base
|
||||
class, which may allow us to save some repeated code in the
|
||||
constructor.
|
||||
|
||||
Security impact
|
||||
---------------
|
||||
|
||||
When we talk about logging and contexts together we typically worry
|
||||
about exposing secret details. I don't think any of these proposed
|
||||
changes expose any information beyond what we are exposing already.
|
||||
|
||||
Performance Impact
|
||||
------------------
|
||||
|
||||
Possibly a slight impact creating :class:`RequestContext` instances in
|
||||
the application. If an app sees that as a problem, they could opt to
|
||||
simply copy the base class API into their local class rather than
|
||||
using a subclass, but it would be up to them to keep up with API
|
||||
changes at that point. I don't think this is a significant performance
|
||||
issue.
|
||||
|
||||
Configuration Impact
|
||||
--------------------
|
||||
|
||||
The defaults for the configuration options might change, but the
|
||||
*output* should be the same and the old values will still work as well
|
||||
as they did before.
|
||||
|
||||
Developer Impact
|
||||
----------------
|
||||
|
||||
The idea is for the other projects to define their context as a
|
||||
subclass of the :class:`RequestContext` in Oslo, implementing or
|
||||
overriding private methods or properties in order to meet the API
|
||||
needed by the logging module.
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
|
||||
Primary assignee:
|
||||
Doug Hellmann (doug-hellmann)
|
||||
|
||||
Other contributors:
|
||||
None
|
||||
|
||||
Milestones
|
||||
----------
|
||||
|
||||
Target Milestone for completion: Kilo-2
|
||||
|
||||
Work Items
|
||||
----------
|
||||
|
||||
1. Remove unused functions from :mod:`context`.
|
||||
2. Add new :meth:`get_logging_values` to :class:`RequestContext`.
|
||||
3. Add abstract properties to :class:`RequestContext`.
|
||||
4. Update default format strings in :mod:`log`.
|
||||
5. Update :mod:`log` to use :meth:`get_logging_values`.
|
||||
|
||||
Incubation
|
||||
==========
|
||||
|
||||
N/A
|
||||
|
||||
Adoption
|
||||
--------
|
||||
|
||||
N/A
|
||||
|
||||
Library
|
||||
-------
|
||||
|
||||
N/A
|
||||
|
||||
Anticipated API Stabilization
|
||||
-----------------------------
|
||||
|
||||
I expect :meth:`get_logging_values` to be stable.
|
||||
|
||||
We may add more generated properties to :class:`RequestContext` over
|
||||
time, but we will have to add those as normal properties (not
|
||||
abstract) to provide backwards compatibility.
|
||||
|
||||
Documentation Impact
|
||||
====================
|
||||
|
||||
The defaults for the config options will need to be updated in any
|
||||
documentation generated from the option definitions.
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
None
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
* Discussion at the juno summit:
|
||||
https://etherpad.openstack.org/p/juno-oslo-release-plan
|
||||
* Mailing list thread that mentions the domain support in Oslo's
|
||||
context as a potential issue for nova:
|
||||
http://lists.openstack.org/pipermail/openstack-dev/2014-February/027634.html
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
This work is licensed under a Creative Commons Attribution 3.0
|
||||
Unported License.
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
Loading…
Reference in New Issue
Block a user