Exceptions

Část Exceptions souboru Runtime.config určuje, jak se budou zpracovávat vzniklé výjimky: zda se má zpráva o výjimce zapsat do log souboru a/nebo odeslat emailem a jaká chybová stránka se má zobrazit.

Situace, které jsou posuzovány jako vyjímka, jsou určeny elementem RunMode.

Atributy

  • catch nepovinný [true, false]

    Hodnota true znamená, že se vzniklá vyjímka eviduje a zobrazí se příslušná chybová stránka. Pokud atribut není uveden použije se hodnota true. Pokud ale element Exceptions není vůbec uveden použije se hodnota false.

Vnitřní elementy

<Exceptions>
    <ErrorPage />
    <LogFile />
    <LogMail />
</Exceptions>

Žádný z uvedených elementů není povinný a lze uvést i více tagů stejného typu.

Element ErrorPage

Definuje chybové stránky, které se zobrazí při chybě nebo neexistenci stránky.

Atributy

  • href nepovinný [string]

    Cesta z rootu aplikace k chybové stránce. Pokud není cesta uvedena, použijí se výchozí chybové stránky definované JellyPotem uložené v adresáři /admin/err.

  • status nepovinný [int]

    Http status, který se chybovou stránkou odešle. Pokud není uveden, použije se status 404 resp. 500.

  • type povinný [404, 500]

    Typ chybové stránky, které se definice týká. Povoleny jsou pouze hodnoty 404 - stránka nenalezena a 500 - chyba aplikace.

Pokud chcete chybovou stránku předefinovat, uložte ji do jiného adresáře, než je adresář /admin. V opačném případě hrozí, že při aktualizaci JellyPotu o tyto změny přijdete.

Vlastní chybové stránky lze v prostředí .NET definovat přímo v souboru web.config. Protože však jejich chování není zcela ideální, umožňuje JellyPot jejich vlastní definování.

Chybové stránky by ve svém html kódu neměly obsahovat žádné relativní cesty. Často jsou totiž vyvolávány roboty přístupem na zcela nesmyslné adresy, které mohou mířit do kdekoliv místa v adresářové struktuře. Například i pro statické odkazy používejte control <je:a>, pro i statické obrázky control <je:img> a podobně.

Element LogFile

Element LogFile určuje log soubor pro zápis podrobností o vzniklých výjimkách.

Atributy

  • for nepovinný [seznam hodnot errs, wrongTypes, unvalidVars, crawlers nebo *]

    Druh výjimek, které se do souboru určeného atributem path budou zapisovat. Lze uvést i kombinaci druhů výjimek oddělených čárkou. Pokud atribut není uveden, použije se hodnota errs, wrongTypes. Viz také Druhy výjimek níže.

  • path povinný [string]

    Fyzická cesta k souboru, např. path="d:/logs/xamplecom.log"

  • rotation nepovinný [noRotation, yearly, monthly, weekly, daily]

    Rotace log souboru. Pro daný interval je vždy nový soubor. Jeho název je doplněn označením daného časového období.

Element LogMail

Určuje parametry smtp serveru a cílovou emailovou adresu pro odeslání hlášení o vzniklých výjimkách.

Atributy

  • for nepovinný [seznam hodnot errs, wrongTypes, unvalidVars, crawlers nebo *]

    Určuje druh výjimek, které budou oznamovány na mail uvedený v atributu to. Lze uvést i kombinaci druhů výjimek oddělených čárkou. Pokud atribut není uveden, použije se hodnota errs, wrongTypes. Viz také Druhy výjimek níže.

  • from povinný [string]

    Emailová adresa, která bude použita jako adresa odesílatele chybové zprávy.

  • fromName nepovinný [string]

    Jméno odesílatele v čitelné podobě.

  • pwd nepovinný [string]

    Heslo pro přihlášení k smtp serveru (pokud to server vyžaduje).

  • smtp povinný [string]

    Adresa SMTP serveru, který se použije pro odeslání zprávy.

  • to povinný [string]

    Emailová adresa, na kterou jsou doručována chybová hlášení.

  • userName nepovinný [string]

    Uživatelské jmeno pro přihlášení k SMTP serveru (pokud to server vyžaduje).

Druhy výjimek

JellyPot rozlišuje tyto typy vyjímek:

Zásadní

Jde o chybu konfigurace nebo chybu v kódu stránek (např. pokus vypsat obsah neexistujícího pole). Také může jít přímo o chybu v systému JellyPot. Tyto chyby nepřekonatelně brání zpracování požadavku a končí stránkou typu 500.

Chyba typu předané proměnné

Tyto chyby nastávají při požadavku na existující stránku, ke kterému je ale připojena proměnná jiného typu než je typ uvedený v atributu expect controlu <je:container>. Tyto chyby končí stránkou typu 404.

Chybu tohoto typu lze v převážné většině úpravou stránek odstranit (tj. zpravidla upravit controly <je:aVar><je:container> tak, aby předávaly a očekávaly shodný typ proměnné).

Chyba při předání neexistující či nesmyslné proměnné

Tyto chyby nastávají při požadavku na existující stránku, ke kterému je ale připojena nexistující nebo žádná proměnná a stránka ji přitom vyžaduje. Chyba končí zobrazením stránky 404. Chyba se může vyskytovat např. při vymazání některých proměnných, přičemž ale ve vyhledavačích zůstávají odkazy na kdysi funkční, nyní již neplatné adresy. Podstatné pro tento chyb je, že je nelze opravit změnou kódu stránek.

V ostrém provozu tyto chyby často vznikají aktivitou robotů, kteří zkouší požadavky na náhodné adresy. JellyPot rozlišuje, zda jde o skutečného návštěvníka a nebo robota a umožňuje evidovat tyto situace zvlášť. Do atributu for elementů LogFileLogMail je tedy možné zapsat kombinace těchto hodnot, oddělených čárkami:

  • errs – do souboru/mailu jsou zapisovány zásadní chyby,
  • wrongTypes – do souboru/mailu jsou zapisovány chyby typu předané proměnné, které vznikly akcí reálného návštěvníka,
  • unvalidVars -– do souboru/mailu jsou zapisovány chyby neexistující či nesmyslné proměnné, které vznikly akcí reálného návštěvníka,
  • crawlers -– do souboru/mailu jsou zapisovány chyby předané proměnné (jak chyby typu, tak chyby neexistující či nesmyslné proměnné), které vznikly akcí webového robota.

Místo zápisu for="errs, wrongTypes, unvalidVars, crawlers" lze použít ekvivalentní for="*".

Je možné také atribut for neuvádět vůbec, pak se budou zaznamenávat chyby typu errs, wrongTypes.

Příklad

<Exceptions catch="true">
    <ErrorPage type="404" href="/err/404.aspx" />
    <ErrorPage type="500" href="/err/500.aspx" />
  
    <LogFile for="errs, wrongTypes"
             path="C:\logs\jpErrs.log"
             rotation="monthly" />
    <LogFile for="unvalidVars, crawlers"
             path="C:\logs\jpErrsC.log"
             rotation="monthly" />
    <LogMail for="errs, wrongTypes"
             smtp="smtp.example.cz"
             from="web@example.cz"
             fromName="Web Example.cz"
             to="bugs@example.cz"
             userName="nameForLogin"
             pwd="password" />
</Exceptions>

Poznámky

Záznamy o chybách jsou do log souborů (či zasílány mailem) pouze, pokud je zachytávání chyb zapnuto. Pokud je zachytávání chyb vypnuto, jsou zobrazovány chyby generované prostředím .NET. Jejich podoba závisí na nastavení v souboru web.config. Obecně je vhodné mít zachytávání chyb vypnuto při vývoji webu, neboť chybová hlášení obsahují podrobnosti o chybné definici controlu atp.

Zachytávání výjimek není nijak závislé na nastavení uvedeném v tagu RunMode. Ten v podstatě jen určuje, které situace se budou posuzovat jako chyba.

Nastavení ošetření chyb, zejména komunikaci s emailovým serverem pro odesílání chyb lze otestovat v administraci na stránce About & Errors. Stránka také obsahuje možnost umělého vyvolání chyby aplikace, aby se dalo ověřit nastavení zpracování chyb.

Připomínky a postřehy

Máte-li nějakou připomínku, dobrý nápad nebo jste našli v dokumentaci chybu, rádi od vás uslyšíme.