All loggers in all languages have these different levels. But rarely is it defined which to use when! It's considered "obvious" but, unless it's actually defined, each programmer will find it obvious in a different way. Reading the logfile in production or using rules to only display logs beyond a certain severity won't be useful if every piece of code uses different levels to mean different things.
Here are the rules I came up with:
http://www.databasesandlife.com/which-log-levels-to-use-when...
It also has a nice feature that it won't bombard you with an email for each error, but instead it collates the errors and only sends an email after 60 seconds (configurable too).
I really recommend this gem. While you're at it, try out lograge gem too, which makes logs much more compact. Both gems work well together.
error/fatal - anything that I simply can't recover from. e.g. if a parameter is missing, there's no way to even guess. error logging is almost always accompanied by an exception being raised. (btw, on our rails app we use the logging-rails[1] gem, that emails those errors to us)
warning - something seems wrong, but we can somehow still continue, or it's an error that I don't want an email about. For example, blocking spam on a form submission.
info - useful stuff to know what's going on with the app. User registered / logged in, payment received. Those are also sent to graphite for measuring
debug - all the other stuff you need when writing code.
[1]https://github.com/TwP/logging-rails