Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
@m_holtermann Logging Rethought 2 The Actions of Frank Taylor Jr. markusholtermann.eu • gitlab.com/MarkusH • github.com/MarkusH • @m_holtermann
Slide 2
Slide 2 text
@m_holtermann Hi, I’m Markus Holtermann ● Engineer at ● Django Core Contributor
Slide 3
Slide 3 text
@m_holtermann
Slide 4
Slide 4 text
@m_holtermann
Slide 5
Slide 5 text
@m_holtermann import logging logger = logging.getLogger(__name__) logger.error( "Login failed because the " "connection to the authentication " "provider %s timed out.", provider_name )
Slide 6
Slide 6 text
@m_holtermann [2019-04-01T10:47:04.139+00:00] [ERROR] [srv01] Login failed because the connection to the authentication provider google timed out.
Slide 7
Slide 7 text
@m_holtermann
Slide 8
Slide 8 text
@m_holtermann
Slide 9
Slide 9 text
@m_holtermann
Slide 10
Slide 10 text
@m_holtermann
Slide 11
Slide 11 text
@m_holtermann
Slide 12
Slide 12 text
@m_holtermann
Slide 13
Slide 13 text
@m_holtermann
Slide 14
Slide 14 text
@m_holtermann import structlog logger = structlog.get_logger("structlog") logger.error( "auth_provider_failed", provider_name=provider_name, provider_ip=provider_ip, timeout=timeout, )
Slide 15
Slide 15 text
@m_holtermann 2019-04-01 10:47:04.139 [error ] auth_provider_failed provider_ip='8.8.8.8' provider_name='google' server='srv01' timeout=5
Slide 16
Slide 16 text
@m_holtermann { "event": "auth_provider_failed", "timestamp": 1554115624.139, "level": "error", "provider_name": "google", "provider_ip": "8.8.8.8", "timeout": 5 }
Slide 17
Slide 17 text
@m_holtermann
Slide 18
Slide 18 text
@m_holtermann
Slide 19
Slide 19 text
@m_holtermann
Slide 20
Slide 20 text
@m_holtermann
Slide 21
Slide 21 text
@m_holtermann
Slide 22
Slide 22 text
@m_holtermann import uuid, structlog logger = structlog.get_logger("structlog") def structlog_middleware(get_response): def _inner(request): request.trace_id = ( request.META.get("HTTP_X_TRACE_ID") or str(uuid.uuid4()) ) log = logger.new(trace_id=request.trace_id) return get_response(request) return _inner
Slide 23
Slide 23 text
@m_holtermann import structlog logger = structlog.get_logger("structlog") def structlog_user_middleware(get_response): def _inner(request): if request.user.is_authenticated: logger.bind(user_id=request.user.pk) return get_response(request) return _inner
Slide 24
Slide 24 text
@m_holtermann
Slide 25
Slide 25 text
@m_holtermann
Slide 26
Slide 26 text
@m_holtermann
Slide 27
Slide 27 text
@m_holtermann
Slide 28
Slide 28 text
@m_holtermann # DO logger.error("some_event", foo="bar", lorem="ipsum") # DON'T DO logger.error("some_event", **some_object.__dict__)
Slide 29
Slide 29 text
@m_holtermann
Slide 30
Slide 30 text
@m_holtermann
Slide 31
Slide 31 text
@m_holtermann
Slide 32
Slide 32 text
@m_holtermann
Slide 33
Slide 33 text
@m_holtermann
Slide 34
Slide 34 text
@m_holtermann
Slide 35
Slide 35 text
@m_holtermann
Slide 36
Slide 36 text
@m_holtermann
Slide 37
Slide 37 text
@m_holtermann
Slide 38
Slide 38 text
@m_holtermann
Slide 39
Slide 39 text
@m_holtermann Thank you!
Slide 40
Slide 40 text
@m_holtermann