Skip to content

Commit d35c7b3

Browse files
authored
Merge pull request #8 from kusha/add-examples
Add simple usage example
2 parents 5211b55 + aac757f commit d35c7b3

File tree

3 files changed

+70
-3
lines changed

3 files changed

+70
-3
lines changed

examples/simple.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
"""Simple usage example of kafka-logging-handler."""
2+
3+
import logging
4+
import os
5+
import sys
6+
import time
7+
8+
from kafka_logger.handlers import KafkaLoggingHandler
9+
10+
REQUIRED_ENV_VARS = ['KAFKA_SERVER', 'KAFKA_CERT', 'KAFKA_TOPIC']
11+
12+
13+
def main():
14+
"""Setup logger and test logging."""
15+
# validate that Kafka configuration is available
16+
assert all([(key in os.environ) for key in REQUIRED_ENV_VARS])
17+
18+
logger = logging.getLogger("test.logger")
19+
logger.propagate = False
20+
log_level = logging.DEBUG
21+
22+
log_format = logging.Formatter(
23+
'%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
24+
'%Y-%m-%dT%H:%M:%S')
25+
26+
# create handler to show logs at stdout
27+
stdout_handler = logging.StreamHandler(sys.stdout)
28+
stdout_handler.setLevel(log_level)
29+
stdout_handler.setFormatter(log_format)
30+
logger.addHandler(stdout_handler)
31+
32+
# create Kafka logging handler
33+
kafka_handler = KafkaLoggingHandler(
34+
os.environ['KAFKA_SERVER'],
35+
os.environ['KAFKA_TOPIC'],
36+
security_protocol='SSL',
37+
ssl_cafile=os.environ['KAFKA_CERT'],
38+
# you can configure how often logger will send logs to Kafka
39+
# flush_buffer_size=3, # uncomment to see that it works slower
40+
# flush_interval=3.0, # interval in seconds
41+
unhandled_exception_logger=logger,
42+
# you can include arbitrary fields to all produced logs
43+
additional_fields={
44+
"service": "test_service"
45+
}
46+
)
47+
kafka_handler.setFormatter(log_format)
48+
logger.addHandler(kafka_handler)
49+
50+
logger.setLevel(log_level)
51+
52+
# test logging
53+
logger.debug("Test debug level logs")
54+
for idx in range(6):
55+
logger.info("Test log #%d", idx)
56+
time.sleep(0.5)
57+
58+
# log unhandled top-level exception logging
59+
raise Exception('No try/except block here')
60+
61+
62+
if __name__ == '__main__':
63+
main()

kafka_logger/handlers.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class KafkaLoggingHandler(logging.Handler):
3232
logger that will be used to log uhandled top-level exception
3333
3434
"""
35+
3536
__LOGGING_FILTER_FIELDS = ['msecs',
3637
'relativeCreated',
3738
'levelno',
@@ -85,8 +86,10 @@ def __init__(self,
8586
self.flush_interval = flush_interval
8687
self.timer = None
8788
self.additional_fields = additional_fields.copy()
88-
self.additional_fields.update({'host': socket.gethostname(),
89-
'host_ip': socket.gethostbyname(socket.gethostname())})
89+
self.additional_fields.update({
90+
'host': socket.gethostname(),
91+
'host_ip': socket.gethostbyname(socket.gethostname())
92+
})
9093

9194
if kafka_producer_args is None:
9295
kafka_producer_args = {}

tox.ini

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# https://github.com/tox-dev/tox/blob/master/tox.ini
44

55
[vars]
6-
SOURCE = kafka_logger
6+
SOURCE = kafka_logger examples
77
TEST_DIR = tests
88

99
[tox]
@@ -46,4 +46,5 @@ import-order-style = google
4646

4747
[testenv:mypy]
4848
deps = mypy
49+
basepython = python3
4950
commands = mypy --ignore-missing-imports {[vars]SOURCE}

0 commit comments

Comments
 (0)