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/marker/markerFactory.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/marker/markerFactory.py')
-rw-r--r-- | pylog/onaplogging/marker/markerFactory.py | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/pylog/onaplogging/marker/markerFactory.py b/pylog/onaplogging/marker/markerFactory.py new file mode 100644 index 0000000..deb9566 --- /dev/null +++ b/pylog/onaplogging/marker/markerFactory.py @@ -0,0 +1,74 @@ +# 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 +# +# 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 abc +import threading +from marker import BaseMarker + +lock = threading.RLock() + + +class IMarkerFactory(object): + __metaclass__ = abc.ABCMeta + + @abc.abstractmethod + def getMarker(self, marker_name=None): + raise NotImplementedError() + + @abc.abstractmethod + def deleteMarker(self, marker_name=None): + raise NotImplementedError() + + @abc.abstractmethod + def exist(self, marker_name=None): + raise NotImplementedError() + + +class MarkerFactory(IMarkerFactory): + + _instance = None + _marker_map = {} + + def __new__(cls, *args, **kwargs): + + if cls._instance is None: + cls._instance = super(MarkerFactory, cls).__new__(cls) + + return cls._instance + + def getMarker(self, marker_name=None): + if marker_name is None: + raise ValueError("not empty") + + marker = self._marker_map.get(marker_name, None) + if marker is None: + lock.acquire() + marker = BaseMarker(name=marker_name) + self._marker_map[marker_name] = marker + lock.release() + + return marker + + def deleteMarker(self, marker_name=None): + lock.acquire() + if self.exist(marker_name): + del self._marker_map[marker_name] + return True + lock.release() + return False + + def exist(self, marker_name=None): + + return self._marker_map.get( + marker_name, None) is not None |