summaryrefslogtreecommitdiffstats
path: root/pylog/onaplogging/mdcContext.py
diff options
context:
space:
mode:
authorliangke <lokyse@163.com>2018-09-06 15:37:38 +0800
committerliangke <lokyse@163.com>2018-09-06 16:05:39 +0800
commita350ca2b4995df6d75c9021dd537589896dccff6 (patch)
treecfc501c24990e51a8f18823681ae962c3f9ad464 /pylog/onaplogging/mdcContext.py
parent0303dc6e5210eee33de05a087a8ea40e80d43fb9 (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.py30
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()