File tree Expand file tree Collapse file tree
aind-dataverse-service-server
src/aind_dataverse_service_server Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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
Original file line number Diff line number Diff 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 ]
Original file line number Diff line number Diff line change 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 } " )
You can’t perform that action at this time.
0 commit comments