Here's how I can see the levels being used in practice:

  * DEBUG - Probably not needed; I can accept this one being dropped from the list
  * INFO - "Are you sure you want to do this?" Used for Potential performance problems. Advice that the approach being used is likely suboptimal (e.g., db_index=False on a ForeignKey).
  * WARNING - "This almost certainly won't work." You need to take a close look and make sure you're right, and probably make a change
  * ERROR -  "We *know* this won't work." You need to make a change (e.g., field accessor clashes)
  * CRITICAL - "OMFG - FIX THIS NOW." e.g., setting with known security problems - an empty ALLOWED_HOSTS for example. 

I completely agree that the distinction between ERROR and CRTICIAL is a bit abstract. Yes, both need to be fixed before you proceed. However, the same is true of logging at ERROR and CRTICIAL. You shouldn't be ignoring either - but having the distinction gives you a hit list of *really* important stuff.

In practice, I don't think CRITICAL will be used all that often -- security issues are the only area where I can see this being used with any regularity.