Welcome Guest, Not a member yet? Register   Sign In
Limiting Stack Trace Error on log file for certain scenarios
#1

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.
Reply
#2

Extend Exceptions::exceptionHandler().
See https://codeigniter4.github.io/CodeIgnit...asses.html
Reply
#3

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

I couldnt manage to implement it
Reply




Theme © iAndrew 2016 - Forum software by © MyBB