parent
cd5f320192
commit
6e57ef77b4
1 changed files with 0 additions and 69 deletions
@ -1,69 +0,0 @@ |
|||||||
import logging |
|
||||||
|
|
||||||
from common.compat import basestring |
|
||||||
from common.logging_extra import SwagFormatter, json_robust_dumps |
|
||||||
|
|
||||||
from logstash_async.handler import AsynchronousLogstashHandler |
|
||||||
from logstash_async.transport import UdpTransport |
|
||||||
|
|
||||||
# elasticsearch doesnt allow different 'keys' with the different types in the same index |
|
||||||
|
|
||||||
class SwagLogstashFormatter(SwagFormatter): |
|
||||||
def __init__(self, swaglogger): |
|
||||||
super(SwagLogstashFormatter, self).__init__(swaglogger) |
|
||||||
|
|
||||||
def fix_kv(self, k, v): |
|
||||||
if isinstance(v, basestring): |
|
||||||
k += "$s" |
|
||||||
elif isinstance(v, float): |
|
||||||
k += "$f" |
|
||||||
elif isinstance(v, bool): |
|
||||||
k += "$b" |
|
||||||
elif isinstance(v, int): |
|
||||||
k += "$i" |
|
||||||
elif isinstance(v, dict): |
|
||||||
nv = {} |
|
||||||
for ik, iv in v.items(): |
|
||||||
ik, iv = self.fix_kv(ik, iv) |
|
||||||
nv[ik] = iv |
|
||||||
v = nv |
|
||||||
elif isinstance(v, list): |
|
||||||
k += "$a" |
|
||||||
return k, v |
|
||||||
|
|
||||||
def format(self, record): |
|
||||||
v = self.format_dict(record) |
|
||||||
|
|
||||||
mk, mv = self.fix_kv('msg', v['msg']) |
|
||||||
del v['msg'] |
|
||||||
v[mk] = mv |
|
||||||
|
|
||||||
return json_robust_dumps(v) |
|
||||||
|
|
||||||
class SwagLogstashHandler(AsynchronousLogstashHandler): |
|
||||||
def __init__(self, host, port, name, formatter): |
|
||||||
super(SwagLogstashHandler, self).__init__(host, port, database_path=None, transport=UdpTransport) |
|
||||||
self.name = name |
|
||||||
if not isinstance(formatter, SwagLogstashFormatter): |
|
||||||
raise ValueError("formatter must be swag") |
|
||||||
self.setFormatter(formatter) |
|
||||||
|
|
||||||
def emit(self, record): |
|
||||||
record.name = self.name |
|
||||||
super(SwagLogstashHandler, self).emit(record) |
|
||||||
|
|
||||||
if __name__ == "__main__": |
|
||||||
from common.logging_extra import SwagLogger |
|
||||||
log = SwagLogger() |
|
||||||
ls_formatter = SwagLogstashFormatter(log) |
|
||||||
ls_handler = SwagLogstashHandler("logstash.comma.life", 5040, "pipeline", ls_formatter) |
|
||||||
log.addHandler(ls_handler) |
|
||||||
s_handler = logging.StreamHandler() |
|
||||||
log.addHandler(s_handler) |
|
||||||
|
|
||||||
log.info("asynclogtest %s", "1") |
|
||||||
log.info({'asynclogtest': 2}) |
|
||||||
log.warning("asynclogtest warning") |
|
||||||
log.error("asynclogtest error") |
|
||||||
log.critical("asynclogtest critical") |
|
||||||
log.event("asynclogtest", a="b") |
|
Loading…
Reference in new issue