Hello,
I have a PHP file runs for hours (like cronjob), sometimes it logs exceptions (its handled but logged to log file) due to SQL deadlocks.
But I couldn't manage to limit string of error log for stack trace that dumped to log file.
To clarify it more here is a sample workflow:
PHP Code:
<?php
function inserter($counter=0){
while (true) {
try:
do some SQL inserts for 1000 times
catch:
log_message('error','excepton 502:' . sizelimit($e->getMessage().$trace,1000).'\n');
}
$counter++;
if($counter<1000)
inserter($counter)
}
?>
as you can see above this is a long running script and it call itselfs, when something goes wrong (its accepted) it logs an error message but my problem is not with my error message. Also it logs a full stack trace by CodeIgniter framework and I couldnt find a way to limit its log. Because while this script is running multiple times, it creates a huge stack trace like:
---------------------------------
ERROR - 2024-04-21 22:24:07 --> ErrorException: pg_query(): Query failed: ERROR: canceling statement due to statement timeout
CONTEXT: while scanning relation "public.datas_meta" in /codeigniterphp/appsrc/system/Database/Postgre/Connection.php:187
Stack trace:
#0 [internal function]: CodeIgniter\Debug\Exceptions->errorHandler(2, 'pg_query(): Que...', '/codeigniterphp/appsrc/sy...', 187)
#1 /codeigniterphp/appsrc/system/Database/Postgre/Connection.php(187): pg_query(Object(PgSql\Connection), ' VACUUM (VERBOS...')
#2 /codeigniterphp/appsrc/system/Database/BaseConnection.php(693): CodeIgniter\Database\Postgre\Connection->execute(' VACUUM (VERBOS...')
#3 /codeigniterphp/appsrc/system/Database/BaseConnection.php(607): CodeIgniter\Database\BaseConnection->simpleQuery(' VACUUM (VERBOS...')
#4 /codeigniterphp/appsrc/app/Controllers/MyController.php(1309): CodeIgniter\Database\BaseConnection->query(' VACUUM (VERBOS...')
#5 /codeigniterphp/appsrc/app/Controllers/MyController.php(164): App\Controllers\MyController->pg_vacuum_tables(0, 1713737945.7492)
#6 /codeigniterphp/appsrc/app/Controllers/MyController.php(271): App\Controllers\MyController->inserter()
#7 /codeigniterphp/appsrc/app/Controllers/MyController.php(271): App\Controllers\MyController->inserter()
#8 /codeigniterphp/appsrc/app/Controllers/MyController.php(271): App\Controllers\MyController->inserter()
#9 /codeigniterphp/appsrc/app/Controllers/MyController.php(271): App\Controllers\MyController->inserter()
#10 /codeigniterphp/appsrc/app/Controllers/MyController.php(271): App\Controllers\MyController->inserter()
#11 /codeigniterphp/appsrc/app/Controllers/MyController.php(271): App\Controllers\MyController->inserter()
#12 /codeigniterphp/appsrc/app/Controllers/MyController.php(271): App\Controllers\MyController->inserter()
#13 /codeigniterphp/appsrc/app/Controllers/MyController.php(271): App\Controllers\MyController->inserter()
#14 /codeigniterphp/appsrc/app/Controllers/MyController.php(271): App\Controllers\MyController->inserter()
#15 /codeigniterphp/appsrc/app/Controllers/MyController.php(271): App\Controllers\MyController->inserter()
#16 /codeigniterphp/appsrc/app/Controllers/MyController.php(271): App\Controllers\MyController->inserter()
#17 /codeigniterphp/appsrc/app/Controllers/MyController.php(271): App\Controllers\MyController->inserter()
#18 /codeigniterphp/appsrc/app/Controllers/MyController.php(271): App\Controllers\MyController->inserter()
#19 /codeigniterphp/appsrc/app/Controllers/MyController.php(271): App\Controllers\MyController->inserter()
#20 /codeigniterphp/appsrc/app/Controllers/MyController.php(271): App\Controllers\MyController->inserter()
#21 /codeigniterphp/appsrc/app/Controllers/MyController .....
....
...
#1000 /codeigniterphp/appsrc/app/Controllers/MyController
---------------------------------
I want to limit total size of dump for a single log message, is there a way to do it or just I have to change play with CI's source code? I didnt want to do it on CI's source code at first intention due to I am happy to migrate new version of it easily, otherwise it increases my anxiety

)
happy to get your ideas.