Skip to content

Commit 8073a71

Browse files
committed
passing logging config to uvicorn, json
1 parent b2b0cc0 commit 8073a71

File tree

2 files changed

+56
-2
lines changed

2 files changed

+56
-2
lines changed
Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,38 @@
1+
import logging.config
2+
13
import uvicorn
24

35
from dataset_image_annotator.api.http import app
46
from dataset_image_annotator.conf import settings
57

68

7-
if __name__ == '__main__':
8-
uvicorn.run(app, host=settings.service_addr, port=settings.service_port)
9+
LOGGING_CONFIG = {
10+
'version': 1,
11+
'disable_existing_loggers': False,
12+
'formatters': {
13+
'default': {
14+
'()': 'dataset_image_annotator.formatter.JSONFormatter',
15+
},
16+
},
17+
'handlers': {
18+
'default': {
19+
'level': settings.logging_level,
20+
'class': 'logging.StreamHandler',
21+
'stream': 'ext://sys.stdout',
22+
'formatter': 'default',
23+
},
24+
},
25+
'loggers': {
26+
'': {
27+
'handlers': ['default', ],
28+
},
29+
'dataset_image_annotator': {
30+
'handlers': ['default', ],
31+
'level': settings.logging_level,
32+
'propagate': False,
33+
}
34+
}
35+
}
36+
logging.config.dictConfig(LOGGING_CONFIG)
37+
38+
uvicorn.run(app, host=settings.service_addr, port=settings.service_port, proxy_headers=True, log_config=LOGGING_CONFIG)
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import base64
2+
import json
3+
import logging
4+
from datetime import datetime, date
5+
from socket import socket
6+
7+
8+
class CustomJSONEncoder(json.JSONEncoder):
9+
def default(self, o):
10+
if isinstance(o, datetime):
11+
return o.isoformat()
12+
elif isinstance(o, date):
13+
return o.isoformat()
14+
elif isinstance(o, bytes):
15+
return base64.b64encode(o).decode('ascii')
16+
elif isinstance(o, socket):
17+
return str(o)
18+
19+
return json.JSONEncoder.default(self, o)
20+
21+
22+
class JSONFormatter(logging.Formatter):
23+
def format(self, record):
24+
return json.dumps(record.__dict__, cls=CustomJSONEncoder)

0 commit comments

Comments
 (0)