add logger
add more exception types