Usage of BCELoss, BCEWithLogitsLoss, CrossEntropyLoss

I was confused what are their different application because of which we have different implementations of them available. For which problems should we use which loss?