WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Fånga felen redan i apache (https://www.wn.se/forum/showthread.php?t=10849)

Axe 2005-11-14 13:54

Jag råkade ut för att ett script gick fel ganska lång tid vilket medförde att vi missat en del intäkter. Eftersm det var ett M2M-gränssnitt så blev vi inte varse felet utan intäkterna minskade bara. Finns det något sätt i apache att göra så att man kan filtrera felen via en php-fil eller liknadne innan loggarna skrivs? Det finns ju mängder av loggar när man har olika domäner och att skapa ett fileter per domän är inte görligt, inte heller att köra samma loggfiler på samma domän.

Eller kan man få enbart php-genererade fel att skrivas separat? Nu hamnar ju också alla php-fel i domänens loggfil.
Idealt vore ju att få alla php-scriptfel att loggas centralt med angivande av sökvägen och scriptnamnet.

koala 2005-11-14 14:08

Kod:

<?php

define('ERR_LOGFILE', 'phpfellog.log');

$oeh = set_error_handler("eh");

function eh ($errno, $errstr, $errfile, $errline) {

 switch ($errno) {
        case E_USER_ERROR:
          $errtitle = 'USER ERROR';
  break;
 
 case E_USER_WARNING:
        $errtitle = 'USER WARNING';
        break;
       
 case E_WARNING:
        $errtitle = 'WARNING';       
        break;
       
 case E_USER_NOTICE:
        $errtitle = 'USER NOTICE';
        break;
       
 case E_NOTICE:
        $errtitle = 'NOTICE';
        break;
       
 case E_STRICT:
        $errtitle = 'RUNTIME NOTICE';
        break;
       
 default:
        $errtitle = 'OKÄNT FEL';
        break;
        }

        if (($errno != E_USER_NOTICE) && ($errno != E_NOTICE) && ($errno != E_STRICT)) {
 error_log(sprintf("%s\r\n%s (#%d) i %s:%d\r\n%s\r\n\r\n-------------------------------------\r\n",date("Y-m-d H:i:s"),$errtitle,$errno,$errfile,$errline,$errstr), 3, ERR_LOGFILE);
        }
}
?>


Jonas 2005-11-14 16:45

koala: set_error_handler() kräver att du "triggar" felen själv med trigger_error().

Det är inget som sker med automatik direkt.

kullervo 2005-11-14 16:46

Du behöver inte dunka ut loggdatan från Apache till fil utan du kan pipe:a det till ett script/program.

kullervo 2005-11-14 16:48

Citat:

Originally posted by Jonas@Nov 14 2005, 16:45
koala: set_error_handler() kräver att du "triggar" felen själv med trigger_error().

Det är inget som sker med automatik direkt.

Där tar du fel. I sådana fall hade det inte varit någon vits med set_error_handler() eftersom man då lika gärna kan kalla på felhanteringsfunktionen direkt istället. Manualen: se.php.net/manual/en/function.set-error-handler.php

Jonas 2005-11-14 16:52

Citat:

Ursprungligen postat av kullervo
Citat:

Ursprungligen postat av Jonas
koala: set_error_handler() kräver att du triggar felen själv med trigger_error().
Det är inget som sker med automatik direkt.

Där tar du fel. I sådana fall hade det inte varit någon vits med set_error_handler() eftersom man då lika gärna kan kalla på felhanteringsfunktionen direkt istället. Manualen: se.php.net/manual/en/function.set-error-handler.php

okej, har aldrig fått den till att funka och eftersom dom visar enbart exempel med trigger_error() så antog jag att man måste sköta all felhantering själv med trigger_error().
+ att det står att man kringgår php's egna felhantering.

Axe 2005-11-14 19:50

Citat:

Originally posted by kullervo@Nov 14 2005, 17:46
Du behöver inte dunka ut loggdatan från Apache till fil utan du kan pipe:a det till ett script/program.

Ja, jag ser att man kan pipa apache till ett script. Det finns till och med ett exempel i php och perl. Problemet som då kvarstår, (ett löst ett kvar) är att antingen måste varje vhost ha ett eget direktiv för att man inte ska tappa bort utsorteringen per domän eller så behöver man dubbla strömmen så den BÅDE skriver till script och till standardpipen som gör utan något script. Jag vill inte integrera på så låg nivå som i ett script.

kullervo 2005-11-14 20:12

Jag förstår inte.

Jonas 2005-11-14 21:16

Citat:

Originally posted by Axe@Nov 14 2005, 20:50
Ja, jag ser att man kan pipa apache till ett script. Det finns till och med ett exempel i php och perl. Problemet som då kvarstår, (ett löst ett kvar) är att antingen måste varje vhost ha ett eget direktiv för att man inte ska tappa bort utsorteringen per domän eller så behöver man dubbla strömmen så den BÅDE skriver till script och till standardpipen som gör utan något script. Jag vill inte integrera på så låg nivå som i ett script.
Ge fan i att definiera någon error_log i vhostarna?
Definiera bara error_log i httpd.conf istället så samlas alla fel där i.

Sedan är det bara att skriva en parser som plockar ut dom fel du vill ha.

eg0master 2005-11-15 06:11

Citat:

Originally posted by Jonas@Nov 14 2005, 22:16
Ge fan i att definiera någon error_log i vhostarna?
Definiera bara error_log i httpd.conf istället så samlas alla fel där i.

Sedan är det bara att skriva en parser som plockar ut dom fel du vill ha.

grep borde väl duga utmärkt för att hämta ut de rader som är intressanta...


Alla tider är GMT +2. Klockan är nu 22:39.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson