The first thing that we think about is how to print out messages. In SystemVerilog, we had a very simple method to print out messages to the console.
$display ("%t addr = 0x%0h data = 0x%0h", addr, data);
The problem here is how to distinguish if a message is informational, debug, warning, error or fatal. Also, it's difficult to maintain consistent format across different files. The reporting classes provide a facility for issuing reports with consistent formatting. Users can configure what actions to take and what files to send output to based on report severity, ID, or both severity and ID. Users can also filter messages based on their verbosity settings.