mirror of
https://github.com/servo/servo.git
synced 2025-06-21 07:38:59 +01:00
55 lines
1.9 KiB
Python
55 lines
1.9 KiB
Python
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
from __future__ import absolute_import, unicode_literals
|
|
|
|
import logging
|
|
|
|
|
|
class LoggingMixin(object):
|
|
"""Provides functionality to control logging."""
|
|
|
|
def populate_logger(self, name=None):
|
|
"""Ensure this class instance has a logger associated with it.
|
|
|
|
Users of this mixin that call log() will need to ensure self._logger is
|
|
a logging.Logger instance before they call log(). This function ensures
|
|
self._logger is defined by populating it if it isn't.
|
|
"""
|
|
if hasattr(self, '_logger'):
|
|
return
|
|
|
|
if name is None:
|
|
name = '.'.join([self.__module__, self.__class__.__name__])
|
|
|
|
self._logger = logging.getLogger(name)
|
|
|
|
def log(self, level, action, params, format_str):
|
|
"""Log a structured log event.
|
|
|
|
A structured log event consists of a logging level, a string action, a
|
|
dictionary of attributes, and a formatting string.
|
|
|
|
The logging level is one of the logging.* constants, such as
|
|
logging.INFO.
|
|
|
|
The action string is essentially the enumeration of the event. Each
|
|
different type of logged event should have a different action.
|
|
|
|
The params dict is the metadata constituting the logged event.
|
|
|
|
The formatting string is used to convert the structured message back to
|
|
human-readable format. Conversion back to human-readable form is
|
|
performed by calling format() on this string, feeding into it the dict
|
|
of attributes constituting the event.
|
|
|
|
Example Usage
|
|
-------------
|
|
|
|
self.log(logging.DEBUG, 'login', {'username': 'johndoe'},
|
|
'User login: {username}')
|
|
"""
|
|
self._logger.log(level, format_str,
|
|
extra={'action': action, 'params': params})
|
|
|