Skip to content

Commit 3390769

Browse files
authored
chore: add logging config in dataverse-service (#6)
* chore: add logging config in dataverse-service * fix: newline init
1 parent 2e1bfbf commit 3390769

3 files changed

Lines changed: 102 additions & 0 deletions

File tree

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
---
2+
version: 1
3+
disable_existing_loggers: false
4+
formatters:
5+
default:
6+
"()": aind_dataverse_service_server.CustomJsonFormatter
7+
format: "%(asctime)s %(levelname)s %(module)s %(lineno)s %(message)s"
8+
reserved_attrs:
9+
- args
10+
- asctime
11+
- created
12+
- exc_info
13+
- exc_text
14+
- filename
15+
- funcName
16+
- levelname
17+
- levelno
18+
- lineno
19+
- message
20+
- module
21+
- msecs
22+
- msg
23+
- name
24+
- pathname
25+
- process
26+
- processName
27+
- relativeCreated
28+
- stack_info
29+
- taskName
30+
- thread
31+
- threadName
32+
- color_message
33+
rename_fields:
34+
"asctime": "timestamp"
35+
"levelname": "level"
36+
static_fields:
37+
"environment": "local"
38+
"software_version": ext://aind_dataverse_service_server.__version__
39+
"software_name": "aind-dataverse-service"
40+
handlers:
41+
console:
42+
class: logging.StreamHandler
43+
formatter: default
44+
level: INFO
45+
stream: ext://sys.stdout
46+
loggers:
47+
'':
48+
handlers:
49+
- console
50+
level: INFO
51+
propagate: true
52+
uvicorn.error:
53+
handlers:
54+
- console
55+
level: INFO
56+
propagate: false
57+
uvicorn.access:
58+
handlers:
59+
- console
60+
level: INFO
61+
propagate: false

aind-dataverse-service-server/pyproject.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ dependencies = [
2525
'fastapi[standard]>=0.114.0',
2626
'azure-identity>=1.15.0',
2727
'fastapi-cache2[redis]>=0.2.2',
28+
'python-json-logger',
29+
'PyYAML'
2830
]
2931

3032
[project.optional-dependencies]
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,42 @@
11
"""Package for pulling info from Dataverse"""
22

3+
import logging.config
4+
import os
5+
from datetime import datetime, timezone
6+
from logging import LogRecord
7+
8+
import yaml
9+
from pythonjsonlogger import json as log_json
10+
311
__version__ = "0.1.0"
12+
13+
14+
# We want to standardize the timestamp format to UTC and ISO-8601, which
15+
# requires a custom formatter and can't be done through configuration only.
16+
class CustomJsonFormatter(log_json.JsonFormatter):
17+
"""Custom class to format log timestamps as ISO-8601 UTC"""
18+
19+
def formatTime(self, record: LogRecord, datefmt=None) -> str:
20+
"""
21+
Format timestamp as ISO-8601 UTC
22+
Parameters
23+
----------
24+
record : LogRecord
25+
datefmt : str, optional
26+
Default is None
27+
28+
Returns
29+
-------
30+
str
31+
32+
"""
33+
dt = datetime.fromtimestamp(record.created, tz=timezone.utc)
34+
return dt.strftime("%Y-%m-%dT%H:%M:%S.%fZ")
35+
36+
37+
if os.path.isfile(os.getenv("LOGGING_CONFIG_FILE", "log_config.yaml")):
38+
config_path = os.getenv("LOGGING_CONFIG_FILE", "log_config.yaml")
39+
with open(config_path, "rt") as f:
40+
config = yaml.safe_load(f.read())
41+
logging.config.dictConfig(config)
42+
logging.info(f"Found logging file at: {config_path}")

0 commit comments

Comments
 (0)