.exception() does not set exc_info=True when used with the default configuration, causing the exception not to be logged. Explicitly adding exc_info=True to the call to exception() does add the info. This seems to have to do with BoundLoggerLazyProxy not having a dedicated exception() proxy that sets exc_info.
exc_info and .exception() are concepts of the standard library. structlog in it’s core is completely agnostic to the underlying logging system. Hence if you want to use stdlib features, you have to configure it as such.
I see, but it still doesn't quite make sense; why does .exception() work if it doesn't do what the name advertises. It seems more appropriate to just not have this method available in the first place if it doesn't augment the log message with exception information.
So it is how it is, and removing the method can't be done without potentially breaking client code. Moving forward and making the method conform to the stdlib logger doesn't make sense either since, as you said, properly configuring structlog with stdlib.BoundLogger fixes the behaviour. Closing the issue.