Encoders
Encoders encode dict[str, Any]
into a str
JsonEncoder
This is very similar encoder to the one from standard library - json.encoder.JSONEncoder
.
This one has support for the datetime.datetime
, datetime.date
and enum.Enum
types
For datetime
and date
it uses the isoformat()
method. For enum the name
property is used
LogfmtEncoder
This encoder encodes into a key=value
format
Encoding rules can be found in examples/encoder.py
and tests/test_encoder_logfmt.py
files.
It also has support for datetime
, date
and Enum
types
Basic example
from logdog.encoder import LogfmtEncoder
encoder = LogfmtEncoder()
obj = {
"string": "string",
"spaces": "with spaces",
"number": 1.123,
"list": ["a", "b", "c"],
"dict": {
"t": True,
"f": False,
"n": None,
},
"true": "true",
}
encoder.encode(obj)
# string=string spaces="with spaces" number=1.123 list=[a b c] dict={t=true f=false n=null} true="true"
Custom types support
To add support for encoding custom types, for example MyType
class,
you can extend existing encoders by overriding their default
method
from typing import Any
from logdog.encoder import LogfmtEncoder
class MyLogfmtEncoder(LogfmtEncoder):
def default(self, obj: Any) -> Any:
if isinstance(obj, MyType):
return f"{obj.some_prop}:{obj.other_prop}"
return super().default(obj)
Writing your own encoder
You can also create your own encoder