Current Location: Home> Latest Articles> How to Generate More Detailed and Custom Error Reports with the getTraceAsString Function for Faster Issue Diagnosis

How to Generate More Detailed and Custom Error Reports with the getTraceAsString Function for Faster Issue Diagnosis

M66 2025-06-15

In daily PHP development, we often encounter situations where the program throws exceptions. To quickly pinpoint the problem, PHP provides a very useful method from the Exception class: getTraceAsString(). This method formats the stack trace information into a string, helping developers quickly understand the location and call chain of the error.

Basic Usage

When an exception is caught, we can directly use getTraceAsString() to get the stack trace information:

try { // Simulate an exception throw new Exception("Test error"); } catch (Exception $e) { echo $e->getTraceAsString(); }

The output will look something like this:

#0 /var/www/html/test.php(3): throw new Exception('Test error')
#1 {main}

Although this provides basic information, in real-world applications, we often want to see more context, or even add custom fields such as the current logged-in user, the requested URL, parameters, etc., to locate the issue faster.

Custom Error Report Template

To generate more detailed error reports, we can wrap a custom error-handling function that integrates getTraceAsString() information with other diagnostic data. For example:

function logExceptionDetailed(Exception $e) { $log = []; $log[] = "Time: " . date('Y-m-d H:i:s'); $log[] = "Error Message: " . $e->getMessage(); $log[] = "File: " . $e->getFile() . " Line " . $e->getLine(); $log[] = "Requested URL: http://m66.net" . $_SERVER['REQUEST_URI']; $log[] = "User IP: " . $_SERVER['REMOTE_ADDR']; $log[] = "Request Parameters: " . json_encode($_REQUEST, JSON_UNESCAPED_UNICODE); $log[] = "Call Stack: \n" . $e->getTraceAsString();
file_put_contents(__DIR__ . '/error.log', implode("\n", $log) . "\n\n", FILE_APPEND);

}

Using it in the program:

try { // Assume some code that could fail someRiskyFunction(); } catch (Exception $e) { logExceptionDetailed($e); echo "System error, please try again later."; }

In this way, we record both the error context and the call stack, which helps to better replicate and analyze issues even in a production environment.

Combining Email Alerts or Remote Notifications

In critical systems, when an error occurs, it may be necessary to not only log it but also notify the developers in real-time. You can extend the logExceptionDetailed function to send an email or call a remote API (such as WeChat, DingTalk, or your own notification system):

function notifyDevTeam($message) { $url = "https://api.m66.net/notify"; // Example API $data = ['msg' => $message];
$opts = [
    "http" => [
        "method" => "POST",
        "header" => "Content-Type: application/json",
        "content" => json_encode($data)
    ]
];
file_get_contents($url, false, stream_context_create($opts));

}

After logging the error, add:

notifyDevTeam(implode("\n", $log));

Conclusion

By using getTraceAsString(), we can obtain detailed call stack information for exceptions, which is extremely helpful for debugging. Combined with contextual information, custom formats, log records, and notification mechanisms, we can build a comprehensive error reporting system. This not only allows us to be immediately aware of problems when they occur but also greatly improves troubleshooting efficiency. It is a feature that every PHP project should consider integrating.