Mercurial > repos > shellac > sam_consensus_v3
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)) |