2008-09-30 17 views

Odpowiedz

6

Domyślnie Elmah używa identyfikatora GUID aplikacji AppPool jako domyślnej nazwy aplikacji. Używa tego jako klucza do identyfikacji błędów w tabeli Elmah_Error, gdy spojrzysz na interfejs sieciowy, który został utworzony przez jego moduł HTTP.

Zostałem zobowiązany do zbadania tej opcji dla mojej firmy na początku tego roku. Nie mogłem znaleźć sposobu, aby zmienić to ustawienie domyślnie, ponieważ Elmah pobiera nazwę aplikacji z HttpRuntime.AppDomainAppId w pliku ErrorLog.cs. Możesz manipulować nim za pomocą dowolnego klawisza; jest to jednak identyfikator GUID AppPool.

Po tym, udało mi się zmanipulować plik ErrorLog.cs, aby przekształcić Elmah w szkielet wywoływalny, zamiast obsługi opartej na jeden i pozwolić mi ustawić ApplicationName. Co skończyło się robi było zmodyfikowanie ErrorLog.cs zawierać właściwość, że pozwolił mi ustawić nazwę, jak poniżej:

public virtual string ApplicationName 
     { 
      get 
      { 
       if (_applicationName == null) { _applicationName = HttpRuntime.AppDomainAppId; } 
       return _applicationName; 
      } 
      set { _applicationName = value; } 
     } 

co prawdopodobnie będziesz musiał zrobić, to dopasować to inaczej i ustawić ApplicationName ale nie HttpRuntime.AppDomainAppId zamiast tego wartość wyciągnięta z pliku web.config. W sumie jest to możliwe. Sposób, w jaki to zrobiłem, ulepszył metodę ErrorLog.Log(ex), więc mogłem użyć Elmah, która ma możliwość wywoływania poza aplikacjami internetowymi. Patrząc wstecz, chciałbym zamiast tego zastosować podejście app/web.config.

Trzeba pamiętać o zmianie nazwy aplikacji w Elmah. Program obsługi http, który generuje interfejs /elmah/default.aspx, przestanie działać. Nadal staram się znaleźć czas, żeby się do tego zakręcić; jednak podczas implementacji może zajść potrzeba utworzenia niestandardowego interfejsu.

+3

Drobne drobnostanie, ale lubię ten wzór lepiej: return _applicationName ?? (_applicationName = HttpRuntime.AppDomainAppId); –

+0

W procedurach przechowywanych w bazie danych Elmah znajdują się filtry przy nazwie aplikacji. Zmieniono wszystkie procedury składowane w moim środowisku, aby zignorować ten filtr, dzięki czemu można wyświetlić wszystkie błędy w jednej konsoli. –

50

Można to teraz zrobić wyłącznie w znacznikach. Wystarczy dodać atrybut applicationName do elementu errorLog w sekcji <elmah> pliku web.config. Przykład:

<errorLog type="Elmah.SqlErrorLog, Elmah" 
    connectionStringName="connectionString" applicationName="myApp" /> 

Przetestowałem to i działa zarówno podczas logowania wyjątek i podczas przeglądania dziennika poprzez Elmah.axd.

Source

W przypadku PO, można by sobie wyobrazić, że może być ustawiony programowo też, ale nie testowałem tego. Dla mnie i wyobrażam sobie, że w przypadku większości scenariuszy podejście znaczeniowe jest wystarczające.

+0

Gdzie dokładnie umieszczasz ten wiersz kodu? Nie mogę zmusić go do działania. :( – Chiramisu

+0

W sekcji pliku web.config. –

+1

Dzięki. Dowiedziałem się, że musisz najpierw zdefiniować to w ''. – Chiramisu

Powiązane problemy