Done in https://github.com/chrismedrela/django/commit/9332a4f46bf2782fdb42cdf82e946a8a73884aa0. There are some issues: 
(1) What should be the minimal level of messages that doesn't allow user to i. e. run a server? This patch assumes the minimal level is `ERROR` level (=30).
(2) `Critical` or `CriticalError` -- which one? The first one follows convention and the second one follows the rule that class names should be nouns, not adjectives.
(3) What about messages formatting? Now we don't have warning and errors; instead we have messages tagged with `level`. This patch prints messages fulfilling `level >= ERROR` condition with red and everything else with yellow.
(4) Colors are one issue. Another one is what should be printed when `display_num_errors==True`? Should we count all messages (like this patch) or should we split them into serious errors (`level >= ERROR`) and others and count them independently? The drawback of the first option is that when there is no error, the output is `No messages found` which is confusing (the old output was `No errors found` and it was clear what it means).