-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Structlog support #2
Labels
enhancement
New feature or request
Milestone
Comments
Structlog supports custom preprocessors, so it is not hard to implement a custom one. This is an example: import os
import sys
from axiom import Client
from structlog import wrap_logger
from structlog.stdlib import BoundLogger
from structlog.processors import add_log_level, StackInfoRenderer, TimeStamper
from structlog.contextvars import merge_contextvars
from structlog.dev import ConsoleRenderer, _use_colors, set_exc_info
axiom_client = Client(
url_base='https://cloud.axiom.co/',
token=os.environ['AXIOM_API_TOKEN'],
)
def axiom_processor(logger, method_name: str, event_dict: dict):
event = {
'level': event_dict['level'],
'event': event_dict['event'],
'timestamp': event_dict['timestamp'],
'data': {k: v for k, v in event_dict.items() if k not in ['timestamp', 'event', 'level']}
}
axiom_client.datasets.ingest_events(
dataset=os.environ['AXIOM_DATASET_ID'],
events=[event]
)
return event_dict
logger: BoundLogger = wrap_logger(
logger=None,
processors=[
merge_contextvars,
add_log_level,
StackInfoRenderer(),
set_exc_info,
TimeStamper(fmt="%Y-%m-%d %H:%M.%S", utc=False),
axiom_processor,
ConsoleRenderer(
colors=_use_colors and sys.stdout is not None and hasattr(sys.stdout, "isatty") and sys.stdout.isatty()
),
]
) |
That looks great, thank you @antoniomdk! |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add support for hynek/structlog, first-class structured logging sounds like a perfect match
The text was updated successfully, but these errors were encountered: