<CFSET Delimit=Chr(13)&Chr(10)>
<CFSET loglocation="c:\cfusion\log\monitor.log">

<!---Zablokuj operacj na pliku--->
<cflock timeout="10"
          throwontimeout="Yes"
          name="writelog"
          type="EXCLUSIVE">

<!---Jeli plik dziennika istnieje, odczytaj go i pobierz identyfikator ostatniego wpisu--->
<CFIF FileExists(loglocation)>
     <cffile action="READ"
        file="#loglocation#"
        variable="log">
     <CFSET lastid=ListFirst(ListLast(log, delimit))+1>
<CFELSE>
     <CFSET lastid=1>
</CFIF>

<!---zamie struktur danych o bdzie w WDDX przeznaczony do zapisu--->
<cfwddx action="CFML2WDDX"
         input="#error#"
         output="packet"
         usetimezone="Yes">

<!---Zapisz do dziennika--->
<cffile action="APPEND"
         file="#loglocation#"
         output="#lastid#,#packet#"
         addnewline="Yes">
</CFLOCK>

<!---Wyslij komunikat o bledzie--->
<cfmail to="#error.mailto#"
         from="ErrorAlert"
         subject="Error: #Error.Type#"
         type="HTML">
<dl>
<!---Petla w strukturze Error. Dzieje sie to automatycznie w momencie pojawienia sie bledu--->
<CFLOOP COLLECTION="#Error#" ITEM="Key">
     <CFSET Value=Error[Key]>
          <CFIF IsSimpleValue(Error[Key])>
               <!---Wyswietl tekst bledu--->
               <dt><B>#Key#</B> - <dd>#Error[Key]#
          <CFELSEIF IsArray(Error[Key])>
               <!---Wyswietl wykaz wszystkich znacznikow, ktore zostaly wykonanie do momentu wystapienia bledu. Warto zwrocic uwage, ze obejmuje to jedynie wykonane znaczniki, a nie wszystkie istniejace.--->
               <dt><B>#Key#</B>
               <ol>
               <CFLOOP INDEX="i" FROM="1"
               TO="#ArrayLen(Error[Key])#">
                     <li>
                          <CFLOOP COLLECTION="#Error[Key][i]#" ITEM="Key2">
                                <B>#key2#</B> - #Error[Key][i][Key2]#<BR>
                          </CFLOOP>
               </CFLOOP>
               </ol>
          </CFIF>
</CFLOOP>
</DL></cfmail>
