-# 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
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):
:return: mdc dict
"""
if MDC.isEmpty():
- return
+ return extra
mdc = MDC.result()
extra = {}
extra['mdc'] = mdc
+
del mdc
return extra
@fetchkeys
def debug(self, msg, *args, **kwargs):
-
if self.isEnabledFor(logging.DEBUG):
self._log(logging.DEBUG, 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()