What am I missing here to understand, because as per my understanding log_statement and log_min_duration_statement are correlated, postgres should log according to log_statement parameter.
The two settings are independent. One logs *all* statements in the specified category, and the other *all* statements that execute longer than the specified threshold. I don't believe there is a built-in way of getting the behavior you're looking for.