Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updating the logging code to not throw away all class information #1493

Merged
merged 2 commits into from
Feb 10, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 24 additions & 1 deletion classes/CCR/Logger.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
* messages while still utilizing Monolog but this will only be the case for loggers retrieved from CCR\Log::factory|singleton
* or if code instantiates this class directly.
*
* Note: This logger supports string and array "messages". If an array is provided that contains objects, then this class
* will use the __toString() function to convert the object to a string.
*
* @package CCR
*/
class Logger extends \Monolog\Logger implements LoggerInterface
Expand Down Expand Up @@ -44,8 +47,28 @@ public function addRecord($level, $message, array $context = array())
protected function extractMessage($record)
{
if (is_array($record)) {
return json_encode($record);
return json_encode($this->recursivelyStringifyObjects($record));
}
return json_encode(array('message' => $record));
}

/**
* This function recursively iterates over the provided $array keys and values. If a value is an object it replaces
* the object with it's cast string value.
*
* @param array $array The array to be recursively iterated over
*
* @return array returns the provided $array w/ any object values cast to strings.
*/
protected function recursivelyStringifyObjects(&$array)
{
while (list($key, $value) = each($array)) {
if (is_object($value)) {
$array[$key] = (string) $value;
} elseif (is_array($value)) {
$array[$key] = $this->recursivelyStringifyObjects($value);
}
}
return $array;
}
}