2626 ```
2727'''
2828
29- from dataclasses import asdict , dataclass , is_dataclass , field
3029from datetime import datetime
3130import io
3231import json
@@ -50,13 +49,13 @@ class LogLevel:
5049
5150class LogFormatter (logging .Formatter ):
5251 'Custom log formatter that formats log messages as JSON, aka "Structured Logging".'
53- def __init__ (self , * args , defaults : dict = field ( default_factory = dict ), ** kwargs ):
52+ def __init__ (self , defaults : dict = {} ):
5453 '''
5554 Initializes the log formatter with optional default context.
5655 - `defaults` is a dictionary of default context values to include in every log message.
5756 '''
5857 self .defaults = defaults
59- super ().__init__ (* args , ** kwargs )
58+ super ().__init__ ()
6059
6160 def format (self , record ) -> str :
6261 'Formats the log message as JSON.'
@@ -73,9 +72,11 @@ def format(self, record) -> str:
7372 record .msg = json .dumps (
7473 {
7574 'timestamp' : datetime .now ().isoformat (),
75+ 'level' : record .levelname ,
76+ 'name' : record .name ,
7677 'msg' : record .msg ,
77- 'data' : {'args' : args } if args else {} | kwargs or {},
78- 'context' : self .defaults or {},
78+ 'event' : {'args' : args } if args else {} | kwargs or {},
79+ ** ({ 'context' : self . defaults } if self .defaults else {}) ,
7980 },
8081 default = _json_default ,
8182 )
@@ -84,10 +85,10 @@ def format(self, record) -> str:
8485
8586
8687def _getLogger (
87- name : str ,
88- level : int = logging .CRITICAL ,
88+ name : str ,
89+ level : int = logging .CRITICAL ,
8990 handlers : list [logging .Handler ] = [],
90- context : dict = field ( default_factory = dict ) ,
91+ context : dict = {} ,
9192) -> logging .Logger :
9293 '''
9394 Creates a logger with the given name, level, and handlers.
@@ -128,11 +129,11 @@ def _getLogger(
128129
129130
130131def getLogger (
131- name : str ,
132- level : int = logging .INFO ,
133- stream : io .TextIOBase = sys .stderr ,
134- files : dict [LogLevel , str ] = dict () ,
135- context : dict = field ( default_factory = dict ) ,
132+ name : str ,
133+ level : int = logging .INFO ,
134+ stream : io .TextIOBase = sys .stderr ,
135+ files : dict [LogLevel , str ] = {} ,
136+ context : dict = {} ,
136137) -> logging .Logger :
137138 '''
138139 Creates a logger with the given name, level, and handlers.
0 commit comments