Mercurial > repos > shellac > sam_consensus_v3
diff env/lib/python3.9/site-packages/galaxy/util/custom_logging/fluent_log.py @ 0:4f3585e2f14b draft default tip
"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author | shellac |
---|---|
date | Mon, 22 Mar 2021 18:12:50 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/env/lib/python3.9/site-packages/galaxy/util/custom_logging/fluent_log.py Mon Mar 22 18:12:50 2021 +0000 @@ -0,0 +1,45 @@ +""" +Provides a `TraceLogger` implementation that logs to a fluentd collector +""" + +import json +import threading +import time + +try: + from fluent.sender import FluentSender +except ImportError: + FluentSender = None + + +FLUENT_IMPORT_MESSAGE = ('The Python fluent package is required to use this ' + 'feature, please install it') + + +class FluentTraceLogger: + def __init__(self, name, host='localhost', port=24224): + assert FluentSender is not None, FLUENT_IMPORT_MESSAGE + self.lock = threading.Lock() + self.thread_local = threading.local() + self.name = name + self.sender = FluentSender(self.name, host=host, port=port) + + def context_set(self, key, value): + self.lock.acquire() + if not hasattr(self.thread_local, 'context'): + self.thread_local.context = {} + self.thread_local.context[key] = value + self.lock.release() + + def context_remove(self, key): + self.lock.acquire() + del self.thread_local.context[key] + self.lock.release() + + def log(self, label, event_time=None, **kwargs): + self.lock.acquire() + if hasattr(self.thread_local, 'context'): + kwargs.update(self.thread_local.context) + self.lock.release() + event_time = event_time or time.time() + self.sender.emit_with_time(label, int(event_time), json.dumps(kwargs, default=str))