comparison 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
comparison
equal deleted inserted replaced
-1:000000000000 0:4f3585e2f14b
1 """
2 Provides a `TraceLogger` implementation that logs to a fluentd collector
3 """
4
5 import json
6 import threading
7 import time
8
9 try:
10 from fluent.sender import FluentSender
11 except ImportError:
12 FluentSender = None
13
14
15 FLUENT_IMPORT_MESSAGE = ('The Python fluent package is required to use this '
16 'feature, please install it')
17
18
19 class FluentTraceLogger:
20 def __init__(self, name, host='localhost', port=24224):
21 assert FluentSender is not None, FLUENT_IMPORT_MESSAGE
22 self.lock = threading.Lock()
23 self.thread_local = threading.local()
24 self.name = name
25 self.sender = FluentSender(self.name, host=host, port=port)
26
27 def context_set(self, key, value):
28 self.lock.acquire()
29 if not hasattr(self.thread_local, 'context'):
30 self.thread_local.context = {}
31 self.thread_local.context[key] = value
32 self.lock.release()
33
34 def context_remove(self, key):
35 self.lock.acquire()
36 del self.thread_local.context[key]
37 self.lock.release()
38
39 def log(self, label, event_time=None, **kwargs):
40 self.lock.acquire()
41 if hasattr(self.thread_local, 'context'):
42 kwargs.update(self.thread_local.context)
43 self.lock.release()
44 event_time = event_time or time.time()
45 self.sender.emit_with_time(label, int(event_time), json.dumps(kwargs, default=str))