&gt; In my opinion, my thesis from GopherCon 2014 still holds: services should only log actionable information. That includes serious, panic-level errors that need to be consumed by humans, or structured data that needs to be consumed by machines.<p>But what if I need some information to debug a problem in the future? I log some related information and when error happens, I can look to the logs and get that information. This might help to debug a problem. Ideally I would like to have a values for all variables at any moment of time. Practically I can&#x27;t have it, but I can get some values, which, I think, are more important. So later, when I debug a problem, I&#x27;ll have more information. And if I don&#x27;t ever need that, no problem, disks are cheap and logs are small (if done properly, there&#x27;s nothing worse than searching for a needle in a 100GB log file).<p>For my programs I developed a simple rules. Log everything important with DEBUG level (but it shouldn&#x27;t be too much, don&#x27;t log 10MB data for each HTTP request). Log everything that happens in the system at a &quot;higher&quot; level with INFO level (like &quot;add record with text {}&quot;). Log everything unusual with WARN level (like user validation failed). Log every unexpected but recoverable (application can serve other requests) error with ERROR level. Log unrecoverable error with FATAL level and shutdown application. Works fine for me. And TRACE level just for debug, it&#x27;s usually turned off, so it might produce any amounts of data.