I totally agree with the others, and think that GrayWizardx said it best.
All that I can add is that these levels generally correspond to their dictionary definitions, so it can't be that hard. If in doubt, treat it like a puzzle. For your particular project, think of everything that you might want to log.
Now, can you figure out what might be fatal? You know what fatale means, don't you? So, which items on your list are fatal.
Ok, that's fatal dealt with, now let's look at errors ... rinse and repeat.
Below Fatal, or maybe Error, I would suggest that more information is always better than less, so err "upwards". Not sure if it's Info or Warning? Then make it a warning.
I do think that Fatal and error ought to be clear to all of us. The others might be fuzzier, but it is arguably less vital to get them right.
Here are some examples:
Fatal - can't allocate memory, database, etc - can't continue
Error - no reply to message, transaction aborted, can't save file, etc
Warning - resource allocation reaches X% (say 80%) - that is a sign that you might want to re-dimension your
Info - user logged in/out, new transaction, file crated, new d/b field, or field deleted
Debug - dump of internal data structure, Anything Trace level with file name & line number
Trace - action succeeded/failed, d/b updated