CodeIgniter Forums
Limiting Stack Trace Error on log file for certain scenarios - Printable Version

+- CodeIgniter Forums (https://forum.codeigniter.com)
+-- Forum: CodeIgniter 4 (https://forum.codeigniter.com/forumdisplay.php?fid=28)
+--- Forum: CodeIgniter 4 Support (https://forum.codeigniter.com/forumdisplay.php?fid=30)
+--- Thread: Limiting Stack Trace Error on log file for certain scenarios (/showthread.php?tid=90707)



Limiting Stack Trace Error on log file for certain scenarios - byrallier - 04-21-2024

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 Smile)

happy to get your ideas.


RE: Limiting Stack Trace Error on log file for certain scenarios - kenjis - 04-21-2024

Extend Exceptions::exceptionHandler().
See https://codeigniter4.github.io/CodeIgniter4/extending/core_classes.html


RE: Limiting Stack Trace Error on log file for certain scenarios - byrallier - 04-22-2024

Thank you, I will play with that, if I can manage, i will be posting answer in here Smile


RE: Limiting Stack Trace Error on log file for certain scenarios - byrallier - 04-23-2024

I couldnt manage to implement it