Skip to content

Commit ed2d4aa

Browse files
authored
Merge pull request #6 from vfabi/develop
[develop] Add Webhook logging handler loglevel (severity) routing
2 parents aab263c + ae55924 commit ed2d4aa

File tree

3 files changed

+52
-24
lines changed

3 files changed

+52
-24
lines changed

README.md

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ Python applications custom logging handler. Use custom JSON format and sends log
1111
Production ready
1212

1313
## Features
14-
- Custom JSON stream logging handler + custom formatter
15-
- Custom Telegram logging handler + custom formatter
14+
- Custom JSON stream logging handler + custom json formatter
15+
- Custom Telegram logging handler + custom formatter (`telegram`)
1616
- Telegram logging handler loglevel (severity) routing
17-
- Custom JSON http logging handler, to send log records as JSON via HTTP/POST (Webhooks)
17+
- Custom Webhook logging handler, to send log records as JSON via HTTP/POST (`webhook`)
18+
- Webhook logging handler loglevel (severity) routing
1819

1920
## Usage
2021

@@ -51,8 +52,10 @@ channels = {
5152
}
5253
},
5354
'webhook': {
54-
'url': 'https://webhooks.example.com/webhooks',
55-
'loglevel': 'WARNING' # DEBUG,INFO,WARNING,ERROR,CRITICAL
55+
'debug':'https://webhooks.example.com/webhooks?param=1',
56+
'info':'https://webhooks.example.com/webhooks?param=2',
57+
'error':'https://webhooks.example.com/webhooks?param=3',
58+
'warning':'https://webhooks.example.com/webhooks?param=4'
5659
}
5760
}
5861

@@ -82,8 +85,10 @@ Args:
8285
}
8386
},
8487
'webhook': {
85-
'url': 'https://webhooks.example.com/webhooks',
86-
'loglevel': 'WARNING' # DEBUG,INFO,WARNING,ERROR,CRITICAL
88+
'debug':'https://webhooks.example.com/webhooks?param=1',
89+
'info':'https://webhooks.example.com/webhooks?param=2',
90+
'error':'https://webhooks.example.com/webhooks?param=3',
91+
'warning':'https://webhooks.example.com/webhooks?param=4'
8792
}
8893
}
8994
'''

python_app_logger/main.py

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
import logging
55
from telegram_handler.handlers import TelegramHandler
6-
from .utils import SeverityFilter, CustomJSONFormatter, CustomHtmlFormatter, JSONHTTPHandler
6+
from .utils import SeverityFilter, CustomJSONFormatter, CustomHtmlFormatter, WebhookHandler
77

88

99
DEFAULT_LOGLEVEL = 'DEBUG'
@@ -29,8 +29,10 @@ def get_logger(app_name, app_version=None, app_environment=None, loglevel=DEFAUL
2929
}
3030
},
3131
'webhook': {
32-
'url': 'https://webhooks.example.com/webhooks',
33-
'loglevel': 'WARNING' # DEBUG,INFO,WARNING,ERROR,CRITICAL
32+
'debug':'https://webhooks.example.com/webhooks?param=1',
33+
'info':'https://webhooks.example.com/webhooks?param=2',
34+
'error':'https://webhooks.example.com/webhooks?param=3',
35+
'warning':'https://webhooks.example.com/webhooks?param=4'
3436
}
3537
}
3638
'''
@@ -41,10 +43,10 @@ def get_logger(app_name, app_version=None, app_environment=None, loglevel=DEFAUL
4143
formatter_json = CustomJSONFormatter('{"app": {"name": "%(app_name)s", "localtime": "%(asctime)s", "environment": "%(app_environment)s", "severity": "%(levelname)s", "message": %(message)s, "version": "%(app_version)s", "logger": "%(name)s", "source": "%(pathname)s:%(funcName)s(%(lineno)d)", "source_pathname": "%(pathname)s", "source_funcname": "%(funcName)s", "source_lineno": "%(lineno)d"}}')
4244
formatter_telegram = CustomHtmlFormatter(
4345
use_emoji=True,
44-
fmt='<b>%(app_name)s (%(app_version)s)</b> <b>%(levelname)s</b>\n\n<b>Message:</b> <code>%(message)s</code>\n<b>Environment:</b> %(app_environment)s\n<b>Source:</b> %(pathname)s:%(funcName)s(%(lineno)d)\n<b>Datetime:</b> %(asctime)s\n<b>Logger:</b> %(name)s\n'
46+
fmt='<b>%(app_name)s (%(app_version)s)</b> <b>%(levelname)s</b>\n\n<b>Message:</b> <code>%(message)s</code>\n<b>Environment:</b> %(app_environment)s\n<b>Datetime:</b> %(asctime)s\n<b>Source:</b> %(pathname)s:%(funcName)s(%(lineno)d)\n'
4547
)
4648

47-
# Handler JSON (main)
49+
# Handler Stream (main)
4850
handler_json = logging.StreamHandler()
4951
handler_json.setFormatter(formatter_json)
5052
handler_json.setLevel(loglevel)
@@ -54,15 +56,36 @@ def get_logger(app_name, app_version=None, app_environment=None, loglevel=DEFAUL
5456
if channels.get('webhook'):
5557
channel = channels['webhook']
5658

57-
if channel.get('url'):
58-
handler_webhook = JSONHTTPHandler(url=channel['url'])
59-
handler_webhook.setFormatter(formatter_json)
60-
if channel.get('loglevel'):
61-
# loglevel_webhook = getattr(logging, channel['loglevel'].upper(), None)
62-
handler_webhook.setLevel(channel['loglevel'])
63-
else:
64-
handler_webhook.setLevel(loglevel)
65-
logger.addHandler(handler_webhook)
59+
if channel.get('critical'):
60+
handler_webhook_critical = WebhookHandler(url=channel['critical'])
61+
handler_webhook_critical.setFormatter(formatter_json)
62+
handler_webhook_critical.setLevel('CRITICAL')
63+
handler_webhook_critical.addFilter(SeverityFilter(logging.CRITICAL))
64+
logger.addHandler(handler_webhook_critical)
65+
if channel.get('error'):
66+
handler_webhook_error = WebhookHandler(url=channel['error'])
67+
handler_webhook_error.setFormatter(formatter_json)
68+
handler_webhook_error.setLevel('ERROR')
69+
handler_webhook_error.addFilter(SeverityFilter(logging.ERROR))
70+
logger.addHandler(handler_webhook_error)
71+
if channel.get('warning'):
72+
handler_webhook_warning = WebhookHandler(url=channel['warning'])
73+
handler_webhook_warning.setFormatter(formatter_json)
74+
handler_webhook_warning.setLevel('WARNING')
75+
handler_webhook_warning.addFilter(SeverityFilter(logging.WARNING))
76+
logger.addHandler(handler_webhook_warning)
77+
if channel.get('info'):
78+
handler_webhook_info = WebhookHandler(url=channel['info'])
79+
handler_webhook_info.setFormatter(formatter_json)
80+
handler_webhook_info.setLevel('INFO')
81+
handler_webhook_info.addFilter(SeverityFilter(logging.INFO))
82+
logger.addHandler(handler_webhook_info)
83+
if channel.get('debug'):
84+
handler_webhook_debug = WebhookHandler(url=channel['debug'])
85+
handler_webhook_debug.setFormatter(formatter_json)
86+
handler_webhook_debug.setLevel('DEBUG')
87+
handler_webhook_debug.addFilter(SeverityFilter(logging.DEBUG))
88+
logger.addHandler(handler_webhook_debug)
6689

6790
# Handler Telegram
6891
if channels.get('telegram'):
@@ -112,11 +135,11 @@ def get_logger(app_name, app_version=None, app_environment=None, loglevel=DEFAUL
112135

113136
logger_adapter.logger.setLevel(loglevel)
114137

115-
# DEBUG: -->
138+
# # DEBUG: -->
116139
# print('-----')
117140
# for handler in logger.handlers:
118141
# print(f'Handler: {handler.__class__.__name__} - {logging.getLevelName(handler.level)}')
119142
# print('-----')
120-
# DEBUG: <--
143+
# # DEBUG: <--
121144

122145
return logger_adapter

python_app_logger/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ def format(self, record):
8787
return super().format(record)
8888

8989

90-
class JSONHTTPHandler(logging.Handler):
90+
class WebhookHandler(logging.Handler):
9191
'''JSON HTTP handler to send records using HTTP/JSON.'''
9292

9393
def __init__(self, url):

0 commit comments

Comments
 (0)