protected function resolveLoggingSource()
{
$validMethods = ['log', 'logException', 'emergency', 'critical', 'error', 'alert', 'warning', 'notice', 'info', 'debug'];
$previousCall = null;
$logCall = null;
// look for the first call to this class calling one of the logging methods
$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
for ($i = count($backtrace) - 1; $i >= 0; $i--) {
$previousCall = $logCall;
$logCall = $backtrace[$i];
if (!empty($logCall['class']) && $logCall['class'] === __CLASS__) {
if (in_array($logCall['function'], $validMethods)) {
break;
}
}
}
$normalizeFile = function ($filename) {
return str_replace(PIMCORE_DOCUMENT_ROOT . '/', '', $filename);
};
$source = '';
if (null !== $previousCall) {
if (isset($previousCall['class'])) {
// called from a class method
// ClassName->methodName():line
$source = sprintf('%s%s%s():%d', $previousCall['class'], $previousCall['type'], $previousCall['function'], $logCall['line']);
} else {
// called from a function
// filename.php::functionName():line
$source = sprintf('%s::%s():%d', $normalizeFile($previousCall['file']), $previousCall['function'], $logCall['line']);
}
} else {
// we don't have a previous call when the logger was directly called
// from a standalone PHP file (e.g. from a CLI script)
// filename.php:line
$source = sprintf('%s:%d', $normalizeFile($logCall['file']), $logCall['line']);
}
return $source;
}