Skip to content

Commit f5e71dc

Browse files
committed
Add support for customizing structured message
Should solve concerns from issue #7.
1 parent feafd21 commit f5e71dc

File tree

1 file changed

+27
-15
lines changed

1 file changed

+27
-15
lines changed

fluent/handler.py

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,35 @@
1111
from fluent import sender
1212

1313

14-
class FluentRecordFormatter(object):
15-
def __init__(self):
14+
class FluentRecordFormatter(logging.Formatter, object):
15+
""" A structured formatter for Fluent.
16+
17+
Best used with server storing data in an ElasticSearch cluster for example.
18+
19+
:param fmt: a dict with format string as values to map to provided keys.
20+
"""
21+
def __init__(self, fmt=None, datefmt=None):
22+
super(FluentRecordFormatter, self).__init__(None, datefmt)
23+
24+
if not fmt:
25+
self._fmt_dict = {
26+
'sys_host': '%(hostname)s',
27+
'sys_name': '%(name)s',
28+
'sys_module': '%(module)s',
29+
}
30+
else:
31+
self._fmt_dict = fmt
32+
1633
self.hostname = socket.gethostname()
1734

1835
def format(self, record):
19-
data = {'sys_host': self.hostname,
20-
'sys_name': record.name,
21-
'sys_module': record.module,
22-
# 'sys_lineno': record.lineno,
23-
# 'sys_levelno': record.levelno,
24-
# 'sys_levelname': record.levelname,
25-
# 'sys_filename': record.filename,
26-
# 'sys_funcname': record.funcName,
27-
# 'sys_exc_info': record.exc_info,
28-
}
29-
# if 'sys_exc_info' in data and data['sys_exc_info']:
30-
# data['sys_exc_info'] = self.formatException(data['sys_exc_info'])
36+
# Compute attributes handled by parent class.
37+
super(FluentRecordFormatter, self).format(record)
38+
# Add ours
39+
record.hostname = self.hostname
40+
# Apply format
41+
data = dict([(key, value % record.__dict__)
42+
for key, value in self._fmt_dict.items()])
3143

3244
self._structuring(data, record.msg)
3345
return data
@@ -75,4 +87,4 @@ def close(self):
7587
self.sender._close()
7688
logging.Handler.close(self)
7789
finally:
78-
self.release()
90+
self.release()

0 commit comments

Comments
 (0)