Repository navigation
Expand file tree
/
Copy pathhandler.py
More file actions
85 lines (70 loc) · 2.31 KB
/
Copy pathhandler.py
File metadata and controls
85 lines (70 loc) · 2.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# -*- coding: utf-8 -*-
import logging
import socket
try:
import simplejson as json
except ImportError: # pragma: no cover
import json
try:
basestring
except NameError: # pragma: no cover
basestring = (str, bytes)
from fluent import sender
class FluentRecordFormatter(object):
def __init__(self):
self.hostname = socket.gethostname()
def format(self, record):
data = {'sys_host': self.hostname,
'sys_name': record.name,
'sys_module': record.module,
# 'sys_lineno': record.lineno,
# 'sys_levelno': record.levelno,
# 'sys_levelname': record.levelname,
# 'sys_filename': record.filename,
# 'sys_funcname': record.funcName,
# 'sys_exc_info': record.exc_info,
}
# if 'sys_exc_info' in data and data['sys_exc_info']:
# data['sys_exc_info'] = self.formatException(data['sys_exc_info'])
self._structuring(data, record.msg)
return data
def _structuring(self, data, msg):
if isinstance(msg, dict):
self._add_dic(data, msg)
elif isinstance(msg, str):
try:
self._add_dic(data, json.loads(str(msg)))
except ValueError:
pass
@staticmethod
def _add_dic(data, dic):
for key, value in dic.items():
if isinstance(key, basestring):
data[str(key)] = value
class FluentHandler(logging.Handler):
'''
Logging Handler for fluent.
'''
def __init__(self,
tag,
host='localhost',
port=24224,
timeout=3.0,
verbose=False,
udp=False):
self.tag = tag
self.sender = sender.FluentSender(tag,
host=host, port=port,
timeout=timeout, verbose=verbose,
udp=udp)
logging.Handler.__init__(self)
def emit(self, record):
data = self.format(record)
self.sender.emit(None, data)
def close(self):
self.acquire()
try:
self.sender._close()
logging.Handler.close(self)
finally:
self.release()