diff options
author | liangke <lokyse@163.com> | 2018-09-06 15:37:38 +0800 |
---|---|---|
committer | liangke <lokyse@163.com> | 2018-09-06 16:05:39 +0800 |
commit | a350ca2b4995df6d75c9021dd537589896dccff6 (patch) | |
tree | cfc501c24990e51a8f18823681ae962c3f9ad464 /pylog/onaplogging/mdcContext.py | |
parent | 0303dc6e5210eee33de05a087a8ea40e80d43fb9 (diff) |
Support Marker in python logging
1 Add 'Marker' feature which carry extra contextual
information for loggers, can be used to mark a single log
statement
2 Make MDC Formatter have "marker" label.
Change-Id: I21ac547b97c49190393d57ff290dcbc3ae20da2a
Issue-ID: MULTICLOUD-328
Signed-off-by: liangke <lokyse@163.com>
Diffstat (limited to 'pylog/onaplogging/mdcContext.py')
-rw-r--r-- | pylog/onaplogging/mdcContext.py | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/pylog/onaplogging/mdcContext.py b/pylog/onaplogging/mdcContext.py index 60075b4..4fdc99c 100644 --- a/pylog/onaplogging/mdcContext.py +++ b/pylog/onaplogging/mdcContext.py @@ -1,15 +1,16 @@ -# Copyright (c) 2018 VMware, Inc. +# Copyright 2018 ke liang <lokyse@163.com>. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. -# You may obtain a copy of the License at: +# You may obtain a copy of the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - +# See the License for the specific language governing permissions and +# limitations under the License. import logging import threading @@ -18,12 +19,14 @@ import os import traceback import sys import functools - +from marker import Marker +from marker import MARKER_TAG __all__ = ['patch_loggingMDC', 'MDC'] _replace_func_name = ['info', 'critical', 'fatal', 'debug', - 'error', 'warn', 'warning', 'log', 'findCaller'] + 'error', 'warn', 'warning', 'log', + 'handle', 'findCaller'] class MDCContext(threading.local): @@ -80,7 +83,7 @@ def _getmdcs(extra=None): :return: mdc dict """ if MDC.isEmpty(): - return + return extra mdc = MDC.result() @@ -93,6 +96,7 @@ def _getmdcs(extra=None): extra = {} extra['mdc'] = mdc + del mdc return extra @@ -106,7 +110,6 @@ def info(self, msg, *args, **kwargs): @fetchkeys def debug(self, msg, *args, **kwargs): - if self.isEnabledFor(logging.DEBUG): self._log(logging.DEBUG, msg, args, **kwargs) @@ -150,6 +153,17 @@ def log(self, level, msg, *args, **kwargs): self._log(level, msg, args, **kwargs) +def handle(self, record): + + cmarker = getattr(self, MARKER_TAG, None) + + if isinstance(cmarker, Marker): + setattr(record, MARKER_TAG, cmarker) + + if (not self.disabled) and self.filter(record): + self.callHandlers(record) + + def findCaller(self, stack_info=False): f = logging.currentframe() |