Доброго времени суток. Столкнулся с проблемой времени выполнения некоторых скриптов в одном большом проекте. Хотел попробовать выиграть хоть пол секунды, сократив формирование строки для логирования. Логов очень много, вызов лога выглядит
примерно вот так:
class SomeClass(){
function someFunction(string $param1, string $param2, int $param3): bool{
debugLog(
'log-level-3',
__METHOD__ ,
': start with arguments: ' .PHP_EOL. $param1 . PHP_EOL. $param2.PHP_EOL . $param3
);
// code
$success = $this->doSomething();
debugLog('log-level-3', __METHOD__, ': end ' . $success ? 'successfully' : 'failure');
return $success;
}
}
Возник вопрос: Как выполнить отложенное формирование строки в 3м параметре debugLog, что бы строка собиралась только в том случае, если 'log-level-3' включен в конфигурациях?
Хотел передавать в 3 параметр анонимную функцию, которая должна вернуть строку, но тогда очень сильно портится читаемость кода
class SomeClass(){
function someFunction(string $param1, string $param2, int $param3): bool{
debugLog(
'log-level-3',
__METHOD__ ,
function() use ($param1, $param2, $param3){
return ': start with arguments: ' .PHP_EOL. $param1 . PHP_EOL. $param2.PHP_EOL . $param3;
}
);
// code
$success = $this->doSomething();
debugLog('log-level-3', __METHOD__, function() use ($success) { return ': end ' . $success ? 'successfully' : 'failure';});
return $success;
}
}
Проект очень большой, много работы с файлами. Проводили тесты на идентичных по железу серверах под linux и windows. На linux, тормоза при формировании документов несущественны, самый долгий - ~15 секунд. При работе под windows - скрипты на формирование документов могут работать иногда до ~90 секунд.
Есть идея попробовать немного ускорить работу, сократив огромное количество конкатенаций.
Вопросы:
1) Существует ли способ как-то красиво оформить такое логирование, что бы не потерять в читаемости?
2) Есть ли смысл бороться с сотнями конкатенаций чуть ли не в каждом запросе?
Пример реального вызова в том, как это существует сейчас: