GetLogger retrieves the logger from the context.
Returns a no-op logger if none is found, enabling graceful degradation
rather than nil pointer panics.
WithLogger attaches a logger to the context for propagation through the request lifecycle.
This enables commands and services to access logging without direct dependencies.