Logging

The main logging mechanism in Drupal is a database log by which client code can use an API to save messages into the watchdog table. The messages in there are cleared after they reach a certain number, but meanwhile they can be viewed in the browser via a handy interface (at admin/reports/dblog):

Alternatively, a core module that is disabled by default, Syslog, can be used to complement/replace this logging mechanism with the Syslog of the server the site is running on. For the purpose of this book, we will focus on how logging works with any mechanism, but we will also take a look at how we can implement our own logging system in Drupal 8.

Drupal 7 developers are very familiar with the watchdog() function they use for logging their messages. This is a procedural API for logging that exposes a simple function that takes some parameters: $type (the category of the message), $message, $variables (an array of values to replace placeholders found in the message), $severity (a constant), and $link (a link to where the message should link to from the UI). It's pretty obvious that this solution is a very Drupal-specific one and not really common to the wider PHP community.

In Drupal 8, this has changed. The Database Logging module remains, the table for storing the messages is still called watchdog, but this logging destination is just one possible implementation that can be done. This is because the logging framework in Drupal 8 has been refactored to be object-oriented and PSR-3 compliant. And in this context, database logging is just the default implementation.