In a large stock pot, melt the butter and add the sliced onions.
After a few minutes of cooking, add the sugar and continue to cook the onions slowly, stirring frequently, for about 30 minutes; until they turn a deep golden brown.
Add the flour and cook for another few minutes.
Add the beef broth, bay leaf and allow the soup to simmer for another 30 minutes.
Taste the soup and see if it needs any salt or pepper. I always wait till the end to season as the broth can add enough saltiness.
Remove the bay leaf.
Cut the French or Italian bread into cubes and toast them in the oven for a few minutes until they are browned.
Spoon the soup into an oven-safe bowl.
Top with the homemade croutons.
Top with the mozzarella cheese.
Place the bowls of soup under the broiler for a few minutes or until the cheese is melted. Sprinkle Parmesan cheese on top before serving.
Traditionally, Gruyere cheese is used for French Onion Soup. I have used Swiss cheese, Mozzarella cheese and Provolone cheese. All work fine.